|
私はパイプがどのように機能するか、特に左側のコマンドの出力が右側のコマンドの入力に渡される方法を理解したいと思います。左コマンドの出力が右コマンドに引数として渡されたファイルとして扱われるかどうか、つまり
a | b
そして
a > a_output
b a_output
これはb
、ファイル名を入力としてインポートして読み取ることを意味します。しかし、これを行うと、状況は次のようになります。
cat wonderfulfile | tr 'a-z' 'A-Z'
tr
ファイル名を入力として使用しないため、できません。または、左コマンドの出力を右コマンドの標準入力として扱います。つまり、
a
印刷
f
g
h
画面に、うん
a | b
そして
b
f
g
h
^D
おそらく
b f g h
または
b 'f g h'
これは以下の内容と矛盾するようです。
who | less
なぜなら、less(少なくともオプションのどれも)はファイル名を必要としないからです。ご協力ありがとうございます。
答え1
これは2番目のオプションです。
a | b
標準出力に出力されるすべてはa
標準入力として提供されます。b
あなたが認識する矛盾は一つではありません。less
ファイル名を要求せずに標準入力から読み取るオプションはありません(ターミナルでない場合は失敗します)。
答え2
左コマンドの出力が右コマンドに引数として渡されたファイルとして扱われるかどうか
いいえ。
パイプは標準出力を標準入力に接続します。それがまさにそれがすることです。>
標準出力をファイルにリダイレクトしたように、|
標準出力ストリームを2番目のコマンドの標準入力ストリームにリダイレクトします。
つまり、b
プログラムが入力で ing などの操作を実行するたびに、出力の内容を読み取ります。その間にファイルはありません。パイプは出力と入力の間の完全な「接続」です。 「標準出力」と「標準入力」は、UNIXスタイルのオペレーティングシステム(およびPCスタイルのハードウェアの他のほとんどのオペレーティングシステム)ですべてのプログラムが持つ2つのストリームです。read
a