2017-06-01 18 views
1
echo aaa > >(echo $(cat)) 

私の意見では、「aaa」と終了しますが、Enterボタンを押していなければ停止します。なぜですか?なぜエコーが終了しないのですか

Thxを

+0

echo aaa - aaaを出力してから終了します。 –

+0

@ArvindDhakadしかし、プロセス置換にリダイレクトします。 – Barmar

答えて

8

入力が完了する前にEnterキーを押すのを待っていません。コマンドはすぐに終了しますが、その出力は次のシェルプロンプトの後に出力されます。シェルはそれだけで完了するためにechoコマンドを待ち、終了するプロセスの代わりにコマンドを待たないので、これがある

[email protected]:~$ echo aaa > >(echo $(cat)) 
[email protected]:~$ aaa 

:それは次のようになります。したがって、echoが実行されるとすぐ次のプロンプトが表示され、echo $(cat)が非同期で実行され、その出力が表示されます。

この時点で別のコマンドを入力すると機能します。出力がプロンプトの後に出力されたので、ちょっと変わったように見えます。 を押す必要があります。独自の行に新しいプロンプトを表示する場合は、と入力します。

+0

!!!!!だからシンプル – urban

+0

thx!それは私の間違いです。 – Henry

+0

を追加します。 wait $! 'は最後のプロセス終了を待つ。 –

2

$(cat)

`cat` 

コマンドと同じです。 catを実行し、その出力に展開されます。

しかし、任意の引数catなしでは(実際には/bin/catcat(1)を参照してください)STDINを読み込み、ファイルの最後まで標準出力にコピーされます。

あなたのシェルはそれを実行しているので、あなたの入力を待っています。

シェルは特定の順序でexpandingです。

+1

プロセス置換は、 'echo aaa'からの入力を取得する必要があることを意味します。 – Barmar

+0

よく 'echo aaa>>(echo $(cat))'これは私のubuntu 16.04で問題なく動作しますか?それはaaaを出力します。なぜ思う? – LethalProgrammer

+0

私が思う質問は、Enterを待っていて、印刷直後に終了していない理由です。 - また何らかの理由で、入力されたものを実行します: 'echo -e" aaa ">>(echo $(cat) ) '、' ls/tmp'と打ち込んで、入力してください.... – urban

関連する問題