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

时间:2011-03-19 01:07:20

标签: node.js pipe

在命令行中,如果我运行

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);

回调获取输出

U2FsdGVkX1/CARBiGos0x9ALNhFqcIaFvZ9EUvVBxuc=

为什么会有所不同?解密它,你就会得到字符串

-n foo

以某种方式,exec-n "foo"编码为"-n foo"(在节点0.4.2下)。

这是最奇怪的部分:当我直接从TextMate运行我的代码时,我没有遇到这个问题(通过jashkenas的'CoffeeScript包)。起初我认为这是一个路径问题,但事实并非如此(在这两个环境中PATH相同没有效果)。也许是因为一个环境是TTY而一个环境不是。

其他人是否意识到这种不一致?这是一个Node bug,还是我忽略了什么?我猜测如果我使用较低级spawn而不是exec,我的问题就会消失。

1 个答案:

答案 0 :(得分:3)

也许是你的/bin/echo doesn't respect -necho通常是内置的shell,并且可以尊重-n。您可能希望使用printf(1)代替它,它更具便携性。