2015-06-11 60 views
1

我試圖用比較目錄列表一個diff命令,在bash工作正常:差異在bash和灰括號

diff <(cd alpha ; find . -type f) <(cd beta; find . -type f) 

然而,灰分在(嵌入式設備沒有其他外殼可用)我得到

-ash: syntax error: unexpected "(" 

是否有關於讀取輸入操作<或括號()有什麼區別?

+0

是的。 'ash'不支持'bash'的進程替換。這就是'<(command)'語法。 –

+1

另外,無論如何,這並不總是可靠地工作。到目前爲止,你顯然很幸運。 'find'不能保證以任何特定的順序返回文件列表,並且順序可以隨着文件被添加/刪除/修改/等等而改變。你可以通過添加一個'|來解決這個問題但是,我猜... – twalberg

回答

3

請勿將<(…)中的尖括號與cat < file等重定向中的尖括號混淆。在bash中,<(echo hi)實際上是一個內容爲「hi」的文件(至少爲了閱讀目的)。所以,你可以做

$ cat < <(echo hi) 
hi 

你也可以做

$ echo <(:) 
/dev/fd/63 

和外殼實際上擴大了進程替換的文件名。

Process substitution是bash功能。它不是POSIX specification的一部分,也不存在於灰燼之類的殼中。另一方面,另一方面,POSIX是Redirection

2

<(command)語法是Process Substitution並且不受ash shell(和其他有限的/ etc。shells)的支持。

+2

如果你需要過程替換,灰有什麼選擇?就像使用'tee'的能力一樣? – CMCDragonkai