一尘不染

如何在节点中为Shell命令转义字符串?

node.js

nodejs中,执行外部命令的唯一方法是通过sys.exec(cmd)。我想调用一个外部命令,并通过stdin给它提供数据。在nodejs中,似乎还没有打开命令然后将数据推送到其中的方法(仅执行并接收其standard
+ error输出),因此,看来我现在要做的唯一方法是通过单个字符串命令,例如:

var dangerStr = "bad stuff here";
sys.exec("echo '" + dangerStr + "' | somecommand");

对此类问题的大多数答案都集中在正则表达式上(不适用于nodejs(使用Google的V8
Javascript引擎)对我来说不适用)或其他语言(如Python)的本机功能。

我想逃避angersStr,以便安全地编写一个上面的exec字符串。如果有帮助,dangerStr将包含JSON数据。


阅读 212

收藏
2020-07-07

共1个答案

一尘不染

有一种写外部命令的方法:process.createChildProcessdocumentation)返回带有write方法的对象。createChildProcess并不是很方便,因为它不缓冲stdout和stderr,因此您将需要事件处理程序来分块读取输出。

var stdout = "", stderr = "";
var child = process.createChildProcess("someCommand");

child.addListener("output", function (data) {
    if (data !== null) {
        stdout += data;
    }
});
child.addListener("error", function (data) {
    if (data !== null) {
        stderr += data;
    }
});
child.addListener("exit", function (code) {
    if (code === 0) {
        sys.puts(stdout);
    }
    else {
        // error
    }
});

child.write("This goes to someCommand's stdin.");
2020-07-07