8

誰か教えてもらえますか?例:次の内容
のファイルがある場合:a.txt

a
b
c

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

4

3 に答える 3

11

配管は1つのプロセスから別のプロセス(cat最初の例ではs)で機能するため、2つのプロセスが連携する必要があります。リダイレクトはシェル自体によって処理されます。これは、変数の操作など、シェルで何かを行うときに問題になる可能性があります。

于 2011-04-27T10:55:53.907 に答える
3

リダイレクションは「STDINをシミュレート」しません。リダイレクトすると、ファイルプロセスのstdinになります。特に、入力が通常のファイルの場合とパイプまたはttyの場合とでは、多くのプログラムの動作が異なるため、異なる動作が発生する可能性があります。例えば:

$ <file perl -E'-f STDIN'の場合、「通常のファイルです」と言います
通常のファイルです
$catファイル| perl -E'-f STDIN'の場合、「通常のファイルです」と言います
于 2011-04-27T11:10:01.560 に答える
1

まず、2つの結果は同じです。言うべきことがない。

の動作原理でcat a.txt | catは、最初の猫が引数a.txtを取り、その内容を出力します。stdout最初のを2番目のにパイプしstdinます。2番目catは引数を検出しないため、からコンテンツを読み取りstdin、それを出力します。

2番目のコマンドで使用するため、システムはのファイルストリームをに<置き換えます。それ以外は、最初のケースの2番目の猫と同じです。stdincata.txt

于 2017-08-22T10:18:47.320 に答える