私は期待
echo |
以下を行います。
- 空の文字列をに印刷します
stdout
。 stdout
にパイプを接続しますstdin
。
空の文字列が書かれたときに私が期待するものはstdin
何もないということです。代わりに何が起こるか:>
bashのbashのように動作するプロンプトが表示されます。
> echo m
m
なぜそんなことですか?
答え1
|
2 つのコマンドを相互接続する演算子です。
cmd1 | cmd2
cmd1
パイプの書き込み端に接続されたcmd2
stdoutと同じパイプの読み取り端に接続されているstdinと並列に開始されます。cmd1
cmd2
存在する:
cmd1 |
右手のコマンドがありません。
シェルは、残りのコマンドを要求する補助プロンプト(PS2
デフォルト)を実行して>
これを通知します。
stdout をecho
パイプの書き込み端にし、その stdin を同じパイプの読み込み端として指定するには (ただし、stdin から読み取らない) 同様のシェル演算子 (パイプリダイレクト演算子) をecho
使用する必要があります。yash
>>|
echo test 1>>|0
これはyash
パイプを作成し、書き込みの終わりをfd 1(stdout)に割り当て、読み取りの終わりをfd 0(stdin)に割り当てるという意味です。
繰り返しますが、これはあまり意味がありません。
答え2
何をパイプで接続したいですか?その後|
、他のコマンドが続く必要があり、bashは>
パイプラインを完了するように求めます。
以下をすべて実行します。
- 空の文字列を標準出力として印刷します。
標準出力を標準入力にパイプします。
eco-n '' |
これはcat
2番目のコマンドのプレースホルダーにすぎません。この場合、単に標準入力を標準出力に送信します。