web-dev-qa-db-ja.com

STDOUTとSTDINを接続するとはどういう意味ですか?

私は本を​​読んでいます、それは言います:

すべてのプロセスには、「標準入力」(STDIN)、「標準出力」(STDOUT)、および「標準エラー」(STDERR)の少なくとも3つの通信チャネルがあります。

ほとんどのコマンドは、STDINからの入力を受け入れ、出力をSTDOUTに書き込みます。彼らはSTDERRにエラーメッセージを書き込みます。この規則により、ビルディングブロックのようにコマンドをつなぎ合わせて、複合パイプラインを作成できます。

シェルはシンボルを解釈します<>>>コマンドの入力または出力をファイルとの間で再ルーティングするための指示として。

1つのコマンドのSTDOUTを別のコマンドのSTDINに接続するには、|シンボル、一般にパイプとして知られています。

ps -ef | grep httpd

つまり、基本的には、標準入力はユーザーがファイルに書き込むことができるコマンドであり、標準出力はbashシェルがシェルに出力を書き込むコマンドであり、標準エラーは出力と同じですが、それだけです。ファイルシステムにエラーがある場合に呼び出されます。次に、STDOUTとSTDINを接続する部分に到達し、私は迷子になります。

10
JohnMerlino

標準入力と標準出力はコマンドではありません。

組立ラインを備えた工場の機械としてコマンドを想像してください。ほとんどのマシンは、データを入力するための1つのコンベヤーベルトとデータを出力するための1つのコンベヤーベルトを持つように設計されています。それらはそれぞれ標準入力と標準出力です。標準エラーは、マシンの側面にある開口部で、リジェクトを排出できます。

+-------+     +------------------+       +------------------+     +------+
| input |     |    machine A     |       |    machine B     |     |output|
| reser ­­­|=====|<stdin     stdout>|=======|<stdin     stdout>|=====|bucket|
| ‑voir |  →  |      stderr      |   →   |      stderr      |  →  |      |
+-------+     +------------------+       +------------------+     +------+
                      ||                          ||

上の図は、2台の機械を通過するコンベヤーベルトを示しています。データは左側の入力リザーバーから送られ、マシンAに送られます。その後、出力はマシンB(入力されたマシン)に送られ、マシンBの出力は右側の出力バケットに格納されます。

UNIXの用語では、これは パイプライン と呼ばれます。メタファーは配管のメタファーです。パイプはマシンAをマシンBに接続します。上記のパイプラインのシェル構文は次のとおりです。

<input-file.txt commandA | commandB >output-file.txt

<redirection シンボルは、commandAを起動する前にcommandAの標準入力をファイルinput-file.txtに接続するようにシェルに指示します。 (コマンド名の前後にリダイレクトを配置できます。)>リダイレクト記号は、シェルにcommandBの標準出力をoutput-file.txtに接続するように指示します。中央のパイプ( "|")記号は、起動する前にcommandAの標準出力をcommandBの標準入力に接続するようにシェルに指示します。

コマンドは複数の入力と複数の出力を持つことができますが、それは another day にとって重要です。

standard input is a command that allows user to write to a file

コマンドではなく、ストリームです。標準の出入りはメールボックスのようなものです。プログラムが起動すると、受信するためのボックスとメールを送信するためのボックスが与えられます。通常、入力はキーボードから行われ、受信ボックスに入れられ、送信ボックスに入れられたメールは最終的に端末画面に表示されます。

standard output is a command that has the bash Shell write output to the Shell

プログラムは、標準出力がどこを指しているのかを実際には知りません。 ($ A | Bのように)AをBにパイプすると、Aがメールを送信ボックスに入れると、最終的にBの受信ボックスに入れられます。 Bは入力を処理し、独自のメールを送信トレイに入れます。これは、端末に表示されるものです。

前述のように、比喩を削除するために、標準のイン/アウトはストリームです。メールボックス、またはファイル記述子は、ストリームの一端です。パイプとは、Aの標準入力をBの標準入力に接続することです。

6