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 wait
der 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_pid
letztendlich 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.