2015-04-17 23 views
1

據我所知,這是可以做到的東西一樣評估的bash/zsh中表達直列

echo `ls` "foobar" 
echo $(ls) "foobar" 

但是當我嘗試做一些像

diff `pip freeze` requirements.txt 
diff $(pip freeze) requirements.txt 

失敗。

缺少什麼我在這裏?謝謝!

P.S我正在使用zsh shell。

回答

6

diff命令確實希望使用文件名作爲參數,而不是字符串。喜歡的東西:

diff file1 file2 

diff "$string1" "$string2" 

如果你想diff的兩個命令的輸出(或你的情況的命令對靜態文件的輸出),您可以使用process substitution:

diff <(pip freeze) requirements.txt 

<()將的pip freeze輸出重定向到一個文件在/dev/fd[0-9]。此文件名將傳遞到diff

+0

我沒能得到,在我的'zsh'的設置工作,但那個曾在'bash'確定。謝謝。 – nunos

+0

我在'zsh'試過'diff <(echo foo)<(echo bar)',它工作正常。你正在使用哪個版本的'zsh'? – hek2mgl

+0

我使用的是'5.0.7'版本。我得到這個錯誤'錯誤:/ dev/fd/11:不支持的文件類型致命:不能散列/ dev/fd/11'。 – nunos

0

嘗試

diff =(pip freeze) requirements.txt