Wenn Sie in Bash einen Job in den Hintergrund stellen (mit STRG + Z oder &), wartet er nicht auf den Abschluss des Jobs und gibt einen Beendigungscode von Null (Erfolg). So viel haben Sie beobachtet und es ist auf den man
Seiten dokumentiert .
Das logische "UND" && wird von links nach rechts getestet. Jeder Teil muss erfolgreich sein. Wenn der erste Teil nicht erfolgreich ist, wird der zweite nicht ausgeführt. Mit && werden also Befehle von links nach rechts ausgeführt, bis einer von ihnen fehlschlägt. Die Definition von Erfolg ist ein Exitcode ($?) Von Null.
Vergleichen Sie dies mit dem logischen "ODER" ||, das Befehle von links nach rechts ausführt, bis einer von ihnen funktioniert .
Erläuterungen zur Subshell-Lösung von @NPE finden Sie auch auf den folgenden man
Seiten:
Zusammengesetzte Befehle und Befehlssequenzen der Form 'a; b; c 'werden nicht ordnungsgemäß behandelt, wenn versucht wird, den Prozess auszusetzen. Wenn ein Prozess gestoppt wird, führt die Shell sofort den nächsten Befehl in der Sequenz aus. Es reicht aus, die Befehlsfolge in Klammern zu setzen, um sie in eine Unterschale zu zwingen, die als Einheit gestoppt werden kann.
Der richtige Begriff für STRG + Z ist das Suspend- Zeichen, wieder von den man
Seiten:
Wenn Sie das Suspend-Zeichen (normalerweise ^ Z, Control-Z) eingeben, während ein Prozess ausgeführt wird, wird dieser Prozess gestoppt und die Steuerung an bash zurückgegeben.
(Tut mir leid, die man
Seiten so oft zu zitieren , aber sie sind wirklich deine Freunde und lesenswert)
Wenn Sie sich das ansehen, werden stty -a
Sie so etwas sehen:
susp = ^Z;
Sie können es also ändern, daher der Ausdruck "typisch". Tun Sie das aber nicht, es wird jeden verwirren. Der Terminaltreiber löst ein SIGTSTP-Signal aus, das von Bash abgefangen wird.
command1; command2
sollte genau das tun, was Sie wollen. In Bezug auf die Terminologie setzt Strg-Z den Prozess aus.