プロセスをバックグラウンドに送り、ターミナルを放棄して終了します (zsh で & と && 演算子が衝突します)

プロセスをバックグラウンドに送り、ターミナルを放棄して終了します (zsh で & と && 演算子が衝突します)

バックグラウンドでプロセスを実行し、現在のターミナルを終了する必要があります。

次のコマンドはエラーになります:

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

単に「google-chrome-stable &!」を呼び出して、if ステートメントでエラー コードを確認することを検討しましたが、これを実現するより簡単な方法を見つけたいと思っています。

答え1

&!どちらも別々のコマンドなので&&、組み合わせることはできません。

google-chrome-stable &! exit

おそらくあなたが探しているのはそれでしょう。

バックグラウンドコマンドが終了するまで終了コードを取得することはできません...

答え2

バックグラウンドジョブの開始から呼び出しシェルに返される終了ステータスはいつもゼロ:

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

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

... と は両方とも&!コマンド&&の終了文字です。つまり、コマンドは次のように記述する必要があります。

google-chrome-stable &! exit

または同等の

google-chrome-stable &!
exit

バックグラウンド ジョブの実際の終了ステータスを取得するには、waitジョブのジョブ ID (所有を解除したため、ジョブ ID は存在しません) またはプロセス ID (そのプロセスを所有を解除したため、シェルが子プロセスと見なすプロセスではなくなり、シェルの現在のジョブのリストから削除されているため、使用できません) を使用する必要があります。

もしあなたが仕事を放棄していなかったら、

google-chrome-stable & chrome_pid=$!

すると、コマンドはwait $chrome_pid最終的にバックグラウンド ジョブの終了ステータスで終了しますが、そのジョブが開始できないか、何らかの方法でブラウザーを閉じることによって終了するまでは終了しません。

関連情報