问题与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
不尊重-n
? echo
往往是一个内在的壳,而且人们可能会尊重-n
。 您可能希望使用printf(1)
而不是使用便携式。