2012-10-20 128 views
3

終端轉錄物不言自明:不一致外部命令輸出

 
iMac:~$ echo -n a | md5 
0cc175b9c0f1b6a831c399e269772661 
iMac:~$ perl -e 'system "echo -n a | md5"' 
c3392e9373ccca33629d82b17699420f 

注意的a MD5散列是0cc175b9c0f1b6a831c399e269772661,第一 結果。爲什麼當perl命令被稱爲 時變得不同?


順便說,Perl是perl的5,12版,顛覆4(v5.12.4)爲達爾文線程多2level建造。並且系統:Mac OS 10.8,達爾文12.0

+0

奇,在Linux和FreeBSD都返回'0cc175b9c0f1b6a831c399e269772661'我 – hexist

+0

哦,那是_really_奇,更復雜了。也許是一個錯誤? – sidyll

+1

非常奇怪,我也剛剛證實我也在mac上得到了你的結果 – hexist

回答

3

當在/bin/sh shell中的mac上,echo -n不會像在/bin/bash中那樣打印出新行。你可以看到這一點,如果你放到/bin/sh和運行echo -n a,你的輸出應該是這樣的:

sh-3.2$ echo -n a 
-n a 

所以你從字面上獲得-n a代替所需a的。像Perl系統運行/bin/sh來評估你的命令,-n a被傳遞到MD5,而不是你想要的a

+0

你真棒,非常感謝。 – sidyll

2

的具體問題已經回答了,但我想指出的是,od是有用的,以幫助準確地瞭解任何命令輸出或文件包含。這對於顯示非打印字符尤其有用。

$ echo -n a | od -tc 
0000000 a                
0000001 

$ perl -e 'system "echo -n a | od -tc";' 
0000000 - n  a \n            
0000005 
+0

感謝您的建議! – sidyll

相關問題