&
führt einen Befehl im Hintergrund aus und gibt unabhängig von seinem Status 0 zurück.
Aus der Manpage:
Wird ein Befehl durch den Kontrolloperator &beendet, führt die Shell den Befehl im Hintergrund in einer Subshell aus. Die Shell wartet nicht auf das Ende des Befehls und der Rückgabestatus ist 0. Durch ein; werden sequentiell ausgeführt; Die Shell wartet darauf, dass die einzelnen Befehle der Reihe nach beendet werden. Der Rückgabestatus ist der Exit-Status des zuletzt ausgeführten Befehls.
Sehen Sie sich an, was Ihre Befehle sind:
test -x examples.desktop && echo $?
Prüfen Sie also, ob examples.desktop
ausführbar ist und wenn ja, dann führe echo $?
aus .
test -x examples.desktop & echo $?
bedeutet prüfen, ob examples.desktop
ist im "Hintergrund" lauffähig. Führen Sie dann echo $?
aus .
Die Bedeutung von &&
und &
sind grundsätzlich verschieden.
- Was ist
&&
in Bash? In Bash – und vielen anderen Programmiersprachen –&&
bedeutet „UND“. Und in einem Befehlsausführungskontext wie diesem bedeutet es Elemente sowohl links als auch rechts von&&
sollten in diesem Fall nacheinander ausgeführt werden. - Was ist
&
in Bash? Und eine einzelne&
bedeutet, dass die vorhergehenden Befehle – unmittelbar links von&
—sollte einfach im Hintergrund laufen.
Betrachten Sie also Ihr Beispiel:
[email protected]:~$ test -x examples.desktop && echo $?
[email protected]:~$ test -x examples.desktop & echo $?
[1] 2992
0
Der erste Befehl – so wie er strukturiert ist – gibt tatsächlich nichts zurück. Aber der zweite Befehl gibt ein [1] 2992
zurück in dem der 2992
bezieht sich auf die im Hintergrund laufende Prozess-ID (PID) und den 0
ist die Ausgabe des ersten Befehls.
Da der zweite Befehl gerade test -x examples.desktop
ausführt im Hintergrund passiert es ziemlich schnell, also wird die Prozess-ID erzeugt und ist ziemlich sofort verschwunden.