私は本を読んでいますが、次のように書かれています。
各プロセスには、「標準入力」(STDIN)、「標準出力」(STDOUT)、および「標準エラー」(STDERR)の3つの使用可能な通信チャネルがあります。
ほとんどのコマンドはSTDINの入力を受け入れ、その出力をSTDOUTに書き込みます。 STDERRにエラーメッセージを書き込みます。このルールを使用すると、ビルディングブロックのようにコマンドを一緒にリンクして複合パイプラインを作成できます。
シェルは、シンボル
<
とコマンドの入力または出力をファイルに再ルーティングするためのガイドライン>
として解釈します。>>
あるコマンドのSTDOUTを別のコマンドのSTDINに接続するには、通常
|
パイプというシンボルを使用します。ps -ef | grep httpd
したがって、基本的にこれは、標準入力はユーザーがファイルに書き込むことを可能にするコマンドであり、標準出力はbashシェルが出力をシェルに書き込むことを可能にするコマンドであり、標準エラーは出力と同じですが、呼び出し時にファイルシステムにエラーが発生したのみ。その後、STDOUTとSTDINを接続する部分を始めましたが、迷子になりました。
答え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
これ<
リダイレクト記号は、シェルが開始する前にcommandA
標準入力をファイルに接続するように指示します。 (コマンド名の前または後ろにリダイレクトを配置できます。)リダイレクトシンボルは、シェルに標準出力を。中央のパイプ(" ")記号は、シェルが起動する前に標準出力を標準入力に接続するように指示します。input-file.txt
commandA
>
commandB
output-file.txt
|
commandA
commandB
コマンドには複数の入力と複数の出力がありますが、コマンドには必ずしも必要ではありません。先日。
答え2
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の標準入力に接続することです。