Prozess in den Hintergrund schicken, Terminal verwerfen und beenden (Konflikt zwischen &- und &&-Operator in zsh)

Prozess in den Hintergrund schicken, Terminal verwerfen und beenden (Konflikt zwischen &- und &&-Operator in zsh)

Ich muss einen Prozess im Hintergrund ausführen und dann das aktuelle Terminal verlassen.

Der folgende Befehl führt zu einem Fehler:

> google-chrome-stable &! && exit
zsh: parse error near '&&'

Ich habe überlegt, einfach „google-chrome-stable &!“ aufzurufen und den Fehlercode über eine if-Anweisung zu prüfen, hoffe aber, einen einfacheren Weg zu finden, dies zu erreichen.

Antwort1

&!und &&beides sind separate Befehle, man kann sie also nicht kombinieren.

google-chrome-stable &! exit

ist wahrscheinlich das, wonach Sie suchen.

Sie können den Exit-Code erst erhalten, wenn der im Hintergrund ausgeführte Befehl beendet wird ...

Antwort2

Der Exit-Status, der an die aufrufende Shell zurückgegeben wird, wenn ein Hintergrundjob gestartet wird, iststetsnull:

% bogus &
[1] 66712
% zsh: command not found: bogus

[1]  + exit 127   bogus
% echo $?
0

... und sowohl &!als auch &&sind Befehlsabschlusszeichen. Das bedeutet, dass Ihr Befehl wahrscheinlich wie folgt geschrieben werden sollte:

google-chrome-stable &! exit

oder als Äquivalent

google-chrome-stable &!
exit

Den tatsächlichen Beendigungsstatus des Hintergrundjobs können Sie nur mithilfe waitder Job-ID des Jobs (es gibt keine, da Sie ihn verworfen haben) oder der Prozess-ID (das geht jedoch nicht, da Sie diesen Prozess verworfen haben und er daher von der Shell nicht mehr als untergeordneter Prozess betrachtet wird; er wird aus der Liste der aktuellen Jobs der Shell entfernt) ermitteln.

Wenn Sie den Job nicht verleugnet hätten, vielleicht durch

google-chrome-stable & chrome_pid=$!

dann würde der Befehl wait $chrome_pidletztendlich mit dem Beendigungsstatus Ihres Hintergrundjobs beendet, jedoch erst, wenn dieser Job beendet wird, entweder weil er nicht gestartet werden kann oder weil Sie den Browser auf irgendeine Weise schließen.

verwandte Informationen