问题与Node.js和child_process.exec参数

在命令行上,如果我运行

echo -n "foo" | openssl aes-128-cbc -k "key" -base64 -e 

-n标志防止echo添加一个新行到其输出结束),我得到

 U2FsdGVkX1+nMW5I4eZSasPKfsUuCpbFsnn56ngEdec= 

但是当我跑步

 exec = require('child_process').exec; exec('echo -n "foo" | openssl aes-128-cbc -k "key" -base64 -e', callback); 

callback获取输出

 U2FsdGVkX1/CARBiGos0x9ALNhFqcIaFvZ9EUvVBxuc= 

为什么不一样? 解密它,你会得到的string

 -n foo 

所以不知何故, exec编码-n "foo""-n foo" (在节点0.4.2下)。

这里是最奇怪的部分:当我直接从TextMate运行我的代码(通过jashkenas的CoffeeScript包)时,我没有得到这个问题。 起初我以为这是一个path问题,但不是(使PATH在两个环境中完全没有影响)。 也许是因为一个环境是一个TTY,一个不是。

其他人是否意识到这种不一致? 这是一个节点错误,还是我忽略了一些东西? 我猜测如果我使用较低级的spawn而不是exec ,我的问题就会消失。

也许你的/bin/echo不尊重-necho往往是一个内在的壳,而且人们可能会尊重-n 。 您可能希望使用printf(1)而不是使用便携式。