サブシェルおよび cd コマンドを使用した stdin/stdout の動作

サブシェルおよび cd コマンドを使用した stdin/stdout の動作

次の一連のコマンドがあります。

cd / && ls | ( cd /tmp && cat >dumpfile)

この一連のコマンドは次のことを行います。/tmp/dumpfileこのファイルにはルートディレクトリのリストが含まれています。

出力はcd / && lsサブシェルにパイプされます。私が見つけたもの奇妙なサブシェルでは、出力をcd /tmp飲み込むのではなく、後でlsインポートcat >dumpfileしてファイルに書き込みます。ここで何が起こっているのでしょうか?

ベストアンサー1

lsパイプはサブシェルから開始するように標準出力を設定します。

サブシェルは同じプロセスで実行されますcd /tmpcat

cd /tmp標準入力(パイプ)から読み取らないため、cat標準入力から読み取るとすべての出力が得られますls

おすすめ記事