2017-05-13 81 views
8

Say zacznę z następującym stwierdzeniem, które echo -sa string w eterze:Prowadzenie rurociągu do procesu, gdy proces nie istnieje?

$ echo "foo" 1>/dev/null 

I wtedy złożyć następujące rurociągu:

$ echo "foo" | cat -e - 1>/dev/null 

I następnie pozostawić proces OUT:

$ echo "foo" | 1>/dev/null 

Dlaczego to nie powoduje wyświetlenia komunikatu o błędzie? Wydaje się, że dokumentacja dotycząca basha i rur nie jest bezpośrednią wzmianką o przyczynie. Czy istnieje EOF wysłany przed pierwszym odczytem z echo (czy jakikolwiek proces jest uruchomiony przed rurą)?

Odpowiedz

8

Proste polecenie powłoki nie wymaga nazwy polecenia. W przypadku polecenia bez nazwy polecenia:

  • przypisania zmiennych mają zastosowanie do bieżącego środowiska wykonawczego. Następujące będzie ustawić dwie zmienne wartości argumentów:

    arg1=$1 arg3=$3 
    
  • przekierowania wystąpić w podpowłoce, ale podpowłoki nie coś innego niż zainicjować przekierowanie zrobić. Następujące będzie obciąć lub tworzyć wskazanego pliku (jeśli masz odpowiednie uprawnienia):

    >/file/to/empty 
    

Jednak komenda musi mieć co najmniej jedno słowo. Całkowicie pusta komenda jest błędem składni (dlatego czasami konieczne jest użycie :).

Odpowiedź podsumowana od Posix XCU§2.9.1