Ich habe ein Makefile, in dem ich einen Dienst stoppe, bevor ich eine Datei entferne. Wenn der Dienst nicht beendet werden konnte, brach er bei einem Fehler ab. Dies ist eindeutig unerwünscht, also dachte ich, ich würde hinzufügen, habe || true
aber eine verpasst |
. Ich mach das:
stop service foo | true
rm /etc/init/foo.conf
Ich bin verwirrt, warum dies funktioniert und was passiert. Bedeutet dies, dass true
es sich um eine Anwendung und nicht nur um ein Schlüsselwort handelt? Sind sie gleich Gibt es einen guten Grund dafür | true
?
| true
besteht darin, dass das Warten auftrue
das Lesen des Pipe-Puffers blockiert wird, wenn der Befehl genügend Ausgabe erzeugt, um den Pipe-Puffer zu füllen .foo || true
undfoo | true
wird die gleiche Sache nicht tun:foo || true
die Ausgabe von zeigenfoo
, währendfoo | true
alles verwerfenfoo
Schreiben in der Standardausgabe (undfoo
wahrscheinlich mit sterbenSIGPIPE
oder zu blockieren, wie bereits angedeutet).