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

在我看來,它應該打印「aaa」並退出,但它會停止,除非我按enter鍵,爲什麼?爲什麼回聲不退出

THX

+0

echo aaa - 應打印aaa,然後退出 –

+0

@ArvindDhakad但它重定向到進程替換。 – Barmar

回答

8

它不會等待您在完成前按下輸入。該命令立即結束,但其輸出在下一個shell提示符後打印。它看起來像:

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

這是因爲shell不會在進程替換等待命令完成,它只是等待echo命令來完成。因此,只要echo完成,打印下一個提示,然後echo $(cat)異步運行並打印其輸出。

如果您在此時鍵入另一個命令,它將起作用。它看起來很奇怪,因爲輸出是在提示後打印的。只需按輸入如果您想在自己的行上提供新提示。

+0

!!!!!如此簡單 – urban

+0

thx!這是我的錯誤。 – Henry

+0

加入';等待$!''等待上一次進程終止後 –

2

$(cat)是一樣的

`cat` 

命令。它運行cat並擴展到它的輸出。

但不帶任何參數cat(實際上/bin/cat,見cat(1))正在讀標準輸入並將其複製到標準輸出直到文件結尾。

所以你的shell正在運行,所以正在等待你的輸入。

按照特定順序,外殼爲expanding

+1

進程替換意味着它應該從'echo aaa'獲得它的輸入。 – Barmar

+0

well'echo aaa >>(echo $(cat))'這個工作在我的ubuntu 16.04中沒有任何問題?,它打印aaa。想知道爲什麼? – LethalProgrammer

+0

我認爲這個問題是爲什麼它正在等待輸入,並且在打印後不立即退出... - 也出於某種原因,它執行給定的輸入,嘗試:echo -e「aaa」>>(echo $(cat) )',輸入'ls/tmp',輸入.... – urban