シェル:bash / shでセミコロンと&シンボルを組み合わせる

シェル:bash / shでセミコロンと&シンボルを組み合わせる
[root@localhost tmppcm]# ls ;エコ終了コード:$? &エコpid:$!
テスト.txt
..
....
...
最終ファイル.txt
[1]1265
プロセス番号は1265です。
終了コードは0です。

上記では、実行が開始され、次にls「並列に」実行されるechoで終わります。

まさに私が望んでいたわけではありません。シーケンス合計をバックグラウンドで実行し、「並列」方式でプロセスIDをエコーし​​たいですlsecho exit code was: $?

解決策は、次の||代わりに;間を使用することです。lsecho 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: $!

おすすめ記事