在命令行中,如果我运行
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
,我的问题就会消失。
答案 0 :(得分:3)
也许是你的/bin/echo
doesn't respect -n
? echo
通常是内置的shell,并且可以尊重-n
。您可能希望使用printf(1)
代替它,它更具便携性。