Xargsとパイプ、複数のコマンドを組み合わせる



Xargs Pipes Combining Multiple Commands



パイプは、あるプログラムの出力を別のプログラムの入力に変える通信メカニズムです。

Xargsは、引数のリストを小さなセグメントに変換し、それらを他のコマンドに渡します。



簡単な例:

echo '--help' | cat echo '--help' | xargs cat

これらの2つのコマンドは非常によく似ています。



パイプとxargsが混乱している点は、前半の内容を後半に渡すことです。違いはなんですか?

エコー「--help」は「--help」として出力され、cat入力として使用されます。それは直接の猫ですか?

しない。



パイプラインメカニズムは本質的に特別なファイルです。そして、それは1回限りであり、データが読み取られると、すぐにパイプラインから削除されます。

パイプラインがファイルtest.txtと見なされるとすると、最初のコマンドは次のように解釈されます。

Echo '--help' #output as ‘--help’ | # test.txt content is ‘--help’ Cat #cat test.txt output ‘--help’

パイプラインを理解した後、2番目のコマンドを見てください。

Echo '--help' #output as ‘--help’ | # test.txt content is ‘--help’ Xargs cat # What will it become here?

xargsで定義されている他のコマンドに引数リスト...を渡します。

つまり、test.txtの内容をパラメータリストとして扱い、そのリストを他のコマンドに渡し、最後に他のコマンドを実行することができます。

つまり、xargsはtest.txtの内容をcatコマンドに渡し、最後にcatコマンドを実行します。

つまり、上記のコマンドでは、xargscatは最終的にcat '-help'を実行します。

言い換えれば、最終的な結果はソースパープルです:

単純なバリアント:

echo 'file1' | cat echo 'file1' | xargs cat

別々に何が出力されますか?

1つ目は「file1」を出力し、2つ目はfile1の内容を出力します

それを試してみてください。