私は期待
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)に割り当てるという意味です。
繰り返しますが、これはあまり意味がありません。