xargsとpipeの違い
A | BとA | xargs Bの違い
A,Bのstdin/stdoutを接続している
例えば、
echoは、引数を、stdoutに書き込むコマンド
$ echo a | echo
これは何も出力されない
左のecho aの結果は、stdoutに書き込んでいるが、
右のechoは、引数を読む
そのため、右は無引数で$ echoしたのと同じ
$ echo a | xargs echo
これは、aが表示される
左のecho aの結果は、stdoutに書き込んでいるが、
xargsによって、stdoutを引数として渡す
そのため、右は$ echo aしたのと同じ
更に複雑な例
下記ファイルを用意して、
code:test1.txt
hoge1
以下のコマンドを実行する
$ echo test1.txt | cat
code:stdout
hoge1
$ echo test1.txt | xargs cat
code:stdout
test1.txt
catの仕様は、
引数のfileを読み込んで、stdoutに書き出す
無引数の時は、stdinから読み取る
つまり、引数もstdinも、入力としうるという
前者のみの$ echoと異なるmrsekut.icon
だから、
$ echo test1.txt | cat
左のstdout: test1.txtと書かれたファイル
右のstdin: 同上
右のstdout: test1.txtと書かれたファイルの中身
つまりtext1.txtという文字列
$ echo test1.txt | xargs cat
左のstdout: test1.txtと書かれたファイル
右の引数: test1.txtという文字列
右のstdout: test1.txtの中身
つまりlog1という文字列