2012-10-20 83 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

相关问题