【问题标题】:Problem with Node.js and child_process.exec argumentsNode.js 和 child_process.exec 参数的问题
【发布时间】:2011-03-19 01:07:19
【问题描述】:

在命令行上,如果我运行

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 而另一个不是。

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

【问题讨论】:

    标签: node.js pipe


    【解决方案1】:

    也许是你的/bin/echo doesn't respect -necho 通常是一个内置的 shell,人们可能会尊重 -n。您不妨改用printf(1),它更便携。

    【讨论】:

    • 嗯,/bin/echo -n "foo" 似乎在 shell 上按预期工作,所以我仍然认为根本原因是 Node 的 exec 有问题。不过感谢printf 指针——我能够用它解决问题。
    • Trevor Burnham,如果您找出问题的根本原因,我真的很想知道为什么您的初始代码没有按预期工作。但我很高兴您找到了完成工作的解决方法。
    • 我自己也遇到了这个问题。会不会是 Node 使用的是 /bin/sh 而不是 /bin/bash?来自 echo 的手册页:“最值得注意的是,sh(1) 中的内置 echo 不接受 -n 选项。”在我的例子中,我用echo foo | tr -d '\n'模拟了echo -n
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2021-12-28
    • 2013-02-23
    • 1970-01-01
    • 2019-09-11
    • 2021-04-20
    相关资源
    最近更新 更多