次の一連のコマンドがあります。
cd / && ls | ( cd /tmp && cat >dumpfile)
この一連のコマンドは次のことを行います。/tmp/dumpfile
このファイルにはルートディレクトリのリストが含まれています。
出力はcd / && ls
サブシェルにパイプされます。私が見つけたもの奇妙なサブシェルでは、出力をcd /tmp
飲み込むのではなく、後でls
インポートcat >dumpfile
してファイルに書き込みます。ここで何が起こっているのでしょうか?
答え1
ls
パイプはサブシェルから開始するように標準出力を設定します。
サブシェルは同じプロセスで実行されますcd /tmp
。cat
cd /tmp
標準入力(パイプ)から読み取らないため、cat
標準入力から読み取るとすべての出力が得られますls
。
答え2
cd
望ましくないので出力を飲み込みません。考えてみてください:
{ ls; date; } | (cd /tmp && date >> date.txt && cat date.txt && cat >dumpfile)
他のコマンドのどれも使用しようとしないため、最後のコマンドだけがパイプからコマンドを保存しますcat >dumpfile
。stdin