Linuxのパイプラインとリダイレクトの違い
-
24-10-2019 - |
質問
誰かが私に違いを教えてもらえますか?例えば:
ファイルがある場合 a.txt
次のコンテンツで:
a
b
c
の違いは何ですか cat a.txt | cat
と cat < a.txt
私には、彼らはすべてstdinをシミュレートしているように思えます、それは正しいですか、それとも違いがありますか?どうもありがとう。
解決
パイピングは、あるプロセスから別のプロセスに動作します( cat
s最初の例では)。したがって、2つのプロセスが協力する必要があります。リダイレクトはシェル自体によって処理されます。これは、シェルで物事を行うときに重要です 変数の操作.
他のヒント
リダイレクトは「stdinをシミュレート」しません。リダイレクトするとき、ファイル は プロセスのstdin。特に、多くのプログラムには、入力がパイプまたはTTYである場合よりも通常のファイルである場合、動作が異なるため、動作が異なる場合があります。例えば:
$ < file perl -E 'say "is a regular file" if -f STDIN' is a regular file $ cat file | perl -E 'say "is a regular file" if -f STDIN'
まず、2つの結果が同じです。いうことがない。
作業原則のために cat a.txt | cat
, 、最初の猫は議論をします a.txt
, 、そのコンテンツを印刷します。あなたはパイプをします stdout
最初の stdin
2番目の。二番目 cat
引数が見つかりませんので、それはからコンテンツを読み取ります stdin
, 、そしてそれを印刷します。
使用するからです <
2番目のコマンドでは、システムが置き換えられます stdin
の cat
のファイルストリーム付き a.txt
. 。他のものは、最初のケースの2番目の猫と同じです。
所属していません StackOverflow