web-dev-qa-db-ja.com

Unixは、最後に「&」(バックグラウンドで実行)を持つ複数のコマンドを分離します

Unixで通常のコマンドを区切るには、次のように最後にセミコロンを付けます。

cd /path/to/file;./someExecutable;

しかし、次のようなコマンドでは機能しないようです。

./myProgram1 > /dev/null &
./myProgram2 > /dev/null &
=>./myProgram1 > /dev/null &;./myProgram2 > /dev/null &;

これらの種類のコマンドを分離する方法はありますか?

また、コマンドプロンプトに貼り付けをコピーした場合、2つ未満の場合は同等ですか?ありがとう。

cd /path/to/file;./someExecutable;

cd /path/to/file;
./someExecutable;
4
Stan

さて「;」コマンドが終了するのをシェルに待機させてから、次のコマンドを続行します。

「&」は、プロセスをバックグラウンドに直接送信し、最初のコマンドが終了したか、まだ実行中であるかに関係なく、次のコマンドを続行します。

そう "&;"期待どおりに機能しません。

しかし、実際にはあなたが何を期待しているのかわかりません。

シェルでこれを試してください:

sleep 2 && echo 1 & echo 2 & sleep 3 && echo 3

出力されます:2 1 3

今それをと比較してください

sleep 2 ; echo 1 & echo 2 & sleep 3 ; echo 3

1 23を出力します

よろしく。

12
Jan.

command1 & command2command1を実行し、プロセスをバックグラウンドに送信し、command2が完了していなくても、すぐにcommand1の実行を開始します。

command1 ; command2は、command1が正常に終了したかどうかに関係なく、command2が終了すると、command1を実行し、command1を実行します。

command1 && command2は、command2が正常に実行を完了した場合にのみcommand1を実行します。 command1が失敗した場合、command2は実行されません。

(...また、完全を期すために...)

command1 || command2は、command2が失敗した場合(ゼロ以外の終了コードで終了する場合)にのみcommand1を実行します。

14
gWaldo