基本的なbash動作[閉じる]

基本的なbash動作[閉じる]

私は期待

echo |

以下を行います。

  1. 空の文字列をに印刷しますstdout
  2. stdoutにパイプを接続しますstdin

空の文字列が書かれたときに私が期待するものはstdin何もないということです。代わりに何が起こるか:>bashのbashのように動作するプロンプトが表示されます。

> echo m
m

なぜそんなことですか?

答え1

|2 つのコマンドを相互接続する演算子です。

cmd1 | cmd2

cmd1パイプの書き込み端に接続されたcmd2stdoutと同じパイプの読み取り端に接続されているstdinと並列に開始されます。cmd1cmd2

存在する:

cmd1 |

右手のコマンドがありません。

シェルは、残りのコマンドを要求する補助プロンプト(PS2デフォルト)を実行して>これを通知します。

stdout をechoパイプの書き込み端にし、その stdin を同じパイプの読み込み端として指定するには (ただし、stdin から読み取らない) 同様のシェル演算子 (パイプリダイレクト演算子) をecho使用する必要があります。yash>>|

echo test 1>>|0

これはyashパイプを作成し、書き込みの終わりをfd 1(stdout)に割り当て、読み取りの終わりをfd 0(stdin)に割り当てるという意味です。

繰り返しますが、これはあまり意味がありません。

答え2

何をパイプで接続したいですか?その後|、他のコマンドが続く必要があり、bashは>パイプラインを完了するように求めます。

以下をすべて実行します。

  • 空の文字列を標準出力として印刷します。
  • 標準出力を標準入力にパイプします。

    eco-n '' |

これはcat2番目のコマンドのプレースホルダーにすぎません。この場合、単に標準入力を標準出力に送信します。

関連情報