$! -cまたはsubshel​​lを使用してbashでコマンドを実行すると空

$! -cまたはsubshel​​lを使用してbashでコマンドを実行すると空

以下を使用して前のコマンドのpidを取得しようとしています$!

$ echo "test" | echo $!
4436
$

サブシェルを起動すると空です。

$ bash
$ echo "test" | echo $!

$

以下を使用して実行すると、-c同じことが起こります。

$ bash -c 'echo "test" | echo $!'

$

書き換えたり、機能したりするオプションを追加できるものはありますかbash -c

ベストアンサー1

$!最後に開始されたバックグラウンドジョブ(で終わるコマンド&)のPIDが保存されます。パイプラインの他の部分に関する情報を取得するために、表示された方法では使用できません。

パイプラインが数値を出力するという事実は、echo "test" | echo $!パイプラインを実行する前のある時点でバックグラウンドジョブを開始したという意味にすぎません。数値出力はパイプのどれにも関係ありません。新しいシェルではバックグラウンド操作が開始されず、パイプは何も出力しません。

おすすめ記事