[root@localhost tmppcm]# ls ;エコ終了コード:$? &エコpid:$! テスト.txt .. .... … ... 最終ファイル.txt [1]1265 プロセス番号は1265です。 終了コードは0です。
上記では、実行が開始され、次にls
「並列に」実行されるechoで終わります。
まさに私が望んでいたわけではありません。シーケンス合計をバックグラウンドで実行し、「並列」方式でプロセスIDをエコーしたいですls
。echo exit code was: $?
解決策は、次の||
代わりに;
間を使用することです。ls
echo exit code was
[root@localhost tmppcm]# ls ||エコ終了コード:$? &エコpid:$! [1]1271 プロセス番号は1271です。 テスト.txt .. .... … ... 最終ファイル.txt 終了コードは0です。
A ; B & C
私が見逃した組み合わせを使ってこれを行うより賢い方法はありますか?
答え1
この場合は使いたいです。コマンドグループ。特定のプログラムをバックグラウンドで実行したいので、そのプログラムが()
独自のサブシェルを持つようにさまざまなプログラムを使用します。括弧を使用してコマンドをグループ化し、次のようにグループ(およびサブシェル)をバックグラウンドに配置できます。
( A; B ) & C
または、この具体的な例では次のようになります。
(ls ; echo exit code was: $?) & echo pid is: $!