次のコマンドについて考えてみます。
ls
dir1 dir2 file1
x1 x2 y2
この出力がたとえばにパイプされるときgrepの各ファイル/ディレクトリは「アイテム」として処理されます。
ls | grep f
file1
したがって、明らかに、ls
が生成する実際の出力とgrepによって処理される入力には違いがあります。
Grepは行で動作するため、ls | grep f
は、最初の行全体を表示します。つまり、dir1 dir2 file1
ここで何が欠けていますか?この動作の背後にあるメカニズムは何ですか?
コマンドは、その出力がTTYに送られるかどうかを検出することができます。したがって、この特定のケースでは、ls
がその出力がTTYに送信されないことを検出すると、-1
が引数として渡されたかのように動作します。
これを見ると、grep
はcat
を使用して特別なことを何もしていないことがわかります。
ls | cat
出力がリダイレクトされているときにls
がどのように動作するかを確認するには、実行してみてください
ls | cat
または
ls -1
これは、出力がTTYに送信されない場合のls
の動作です。