我試圖用比較目錄列表一個diff命令,在bash工作正常:差異在bash和灰括號
diff <(cd alpha ; find . -type f) <(cd beta; find . -type f)
然而,灰分在(嵌入式設備沒有其他外殼可用)我得到
-ash: syntax error: unexpected "("
是否有關於讀取輸入操作<
或括號(
)
有什麼區別?
我試圖用比較目錄列表一個diff命令,在bash工作正常:差異在bash和灰括號
diff <(cd alpha ; find . -type f) <(cd beta; find . -type f)
然而,灰分在(嵌入式設備沒有其他外殼可用)我得到
-ash: syntax error: unexpected "("
是否有關於讀取輸入操作<
或括號(
)
有什麼區別?
請勿將<(…)
中的尖括號與cat < file
等重定向中的尖括號混淆。在bash中,<(echo hi)
實際上是一個內容爲「hi」的文件(至少爲了閱讀目的)。所以,你可以做
$ cat < <(echo hi)
hi
你也可以做
$ echo <(:)
/dev/fd/63
和外殼實際上擴大了進程替換的文件名。
Process substitution是bash功能。它不是POSIX specification的一部分,也不存在於灰燼之類的殼中。另一方面,另一方面,POSIX是Redirection。
<(command)
語法是Process Substitution並且不受ash
shell(和其他有限的/ etc。shells)的支持。
如果你需要過程替換,灰有什麼選擇?就像使用'tee'的能力一樣? – CMCDragonkai
是的。 'ash'不支持'bash'的進程替換。這就是'<(command)'語法。 –
另外,無論如何,這並不總是可靠地工作。到目前爲止,你顯然很幸運。 'find'不能保證以任何特定的順序返回文件列表,並且順序可以隨着文件被添加/刪除/修改/等等而改變。你可以通過添加一個'|來解決這個問題但是,我猜... – twalberg