nodejs'exec'命令不能正确执行'sed'命令

时间:2015-02-11 03:34:37

标签: javascript node.js sed exec

我有一个文件,我想要扫描它,找到字符'{'并创建一个新行,然后在新行上添加一个IP并在行的末尾添加一个半古龙水,然后写入配置文件。

从shell运行时,我可以使用以下sed命令完成此操作:

sed -i 's/{/&\n1.1.1.1;/g' /tmp/test.conf

在test.conf中:

acl testACL{
};

shell中命令的输出显示:

acl testACL{
1.1.1.1;
};

工作完美!现在问题就是我让nodejs执行它:

        var sys = require('sys');
        var exec = require('child_process').exec;
        function puts(error, stdout, stderr) { sys.puts(stdout) };
        exec("sed -i 's/{/&\n1.1.1.1;/g' /tmp/test.conf",puts);
        return 0;

当我在控制台中运行命令时:'nodejs test.js'

我得到空白输出,当我检查文件时,文件'test.conf'没有被改变!为什么?!

此外,如果您认为'这是权限问题!'我有nodejs exec命令将基本回声写入测试配置文件,它工作正常。

我也试过'shelljs'模块而没有运气。我已经尝试了几个小时的无数组合,但没有优势!我很困惑。

1 个答案:

答案 0 :(得分:2)

我认为您需要将\n作为\\n转义。现在,它被解析为命令中的文字换行符,这使得它变得混乱。