質問

誰かが私に違いを教えてもらえますか?例えば:
ファイルがある場合 a.txt 次のコンテンツで:

a
b
c

の違いは何ですか cat a.txt | catcat < a.txt
私には、彼らはすべてstdinをシミュレートしているように思えます、それは正しいですか、それとも違いがありますか?どうもありがとう。

役に立ちましたか?

解決

パイピングは、あるプロセスから別のプロセスに動作します( cats最初の例では)。したがって、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番目のコマンドでは、システムが置き換えられます stdincat のファイルストリーム付き a.txt. 。他のものは、最初のケースの2番目の猫と同じです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top