Mam plik makefile, w którym zatrzymuję usługę przed usunięciem pliku. Gdy nie może zatrzymać usługi, zepsuje się przy błędzie. Jest to wyraźnie niepożądane, więc pomyślałem, że dodam, || true
ale przegapiłem |
. Robić to:
stop service foo | true
rm /etc/init/foo.conf
Jestem zdezorientowany, dlaczego to działa i co się dzieje. Czy to oznacza, że true
jest to aplikacja, a nie tylko słowo kluczowe? Czy oni są tacy sami? Czy istnieje dobry powód do korzystania | true
?
| true
jest to, że jeśli polecenie wygenerowało wystarczającą ilość danych wyjściowych do wypełnienia bufora potoku, blokowałoby oczekiwanie natrue
jego odczytanie.foo || true
ifoo | true
nie zrobię tego samego:foo || true
pokaże wyjście zfoo
, natomiastfoo | true
odrzuci wszystko, cofoo
zapisuje na standardowe wyjście (ifoo
prawdopodobnie umrze zSIGPIPE
lub zablokuje, jak już wskazano).