プロセスをバックグラウンドで送信し、端末を拒否して終了します(zshで&と&&演算子の競合)

プロセスをバックグラウンドで送信し、端末を拒否して終了します(zshで&と&&演算子の競合)

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

次のコマンドを実行するとエラーが発生します。

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

私は単に「google-chrome-stable&!」を呼び出してifステートメントを介してエラーコードをチェックすることを検討しましたが、これを行うより簡単な方法を探したいと思います。

答え1

&!2つの個別のコマンドがあるため、2つの&&コマンドを組み合わせることはできません。

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(ただし、プロセスを拒否したためインポートできません)を使用して、バックグラウンドジョブの実際の終了ステータスのみを取得できます。バックグラウンドジョブの実際の終了ステータスを取得します。シェルは子プロセスのプロセスと見なされなくなり、シェルの現在のタスクのリストから削除されました。

あなたがそれをあきらめなかった場合、おそらく

google-chrome-stable & chrome_pid=$!

その後、コマンドはwait $chrome_pid最終的にバックグラウンドジョブの終了状態で終了しますが、そのジョブが終了するまで終了しません(いずれの方法でもブラウザの起動または閉じに失敗したため)。

関連情報