誰か教えてもらえますか?例:次の内容
のファイルがある場合:a.txt
a
b
c
cat a.txt | cat
との違いは何でしょうか。cat < a.txt
それらはすべてSTDINをシミュレートしているように見えますか、それは正しいですか、それとも違いがありますか?どうもありがとう。
誰か教えてもらえますか?例:次の内容
のファイルがある場合:a.txt
a
b
c
cat a.txt | cat
との違いは何でしょうか。cat < a.txt
それらはすべてSTDINをシミュレートしているように見えますか、それは正しいですか、それとも違いがありますか?どうもありがとう。
配管は1つのプロセスから別のプロセス(cat
最初の例ではs)で機能するため、2つのプロセスが連携する必要があります。リダイレクトはシェル自体によって処理されます。これは、変数の操作など、シェルで何かを行うときに問題になる可能性があります。
リダイレクションは「STDINをシミュレート」しません。リダイレクトすると、ファイルはプロセスのstdinになります。特に、入力が通常のファイルの場合とパイプまたはttyの場合とでは、多くのプログラムの動作が異なるため、異なる動作が発生する可能性があります。例えば:
$ <file perl -E'-f STDIN'の場合、「通常のファイルです」と言います 通常のファイルです $catファイル| perl -E'-f STDIN'の場合、「通常のファイルです」と言います
まず、2つの結果は同じです。言うべきことがない。
の動作原理でcat a.txt | cat
は、最初の猫が引数a.txt
を取り、その内容を出力します。stdout
最初のを2番目のにパイプしstdin
ます。2番目cat
は引数を検出しないため、からコンテンツを読み取りstdin
、それを出力します。
2番目のコマンドで使用するため、システムはのファイルストリームをに<
置き換えます。それ以外は、最初のケースの2番目の猫と同じです。stdin
cat
a.txt