如何从node.js应用程序在命令行上传递带引号和空格的数据?

时间:2018-05-19 02:08:50

标签: node.js shell

我想从使用node.js构建的Web应用程序中调用命令行应用程序。我想在参数中传递一些数据。

如果要传递的数据有一些引号字符,则会抛出错误,因为shell无法正确解析参数。

有没有比将数据写入文件并传递文件名更好的方法?

2 个答案:

答案 0 :(得分:1)

should never rely on escaping unknown input going to a shell parameter - 几乎总会有一些你想到的边缘情况允许用户在你的服务器上执行任意代码。

Node支持调用命令并单独传递每个参数,不需要转义。这是最安全的方法:

const { spawn } = require('child_process');
// Note that the arguments are in an array, not using string interpolation
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

文档为here

答案 1 :(得分:-1)

我建议您使用服务器端语言中的正则表达式或替换函数来转义单引号(\')。再说一遍,我不知道那是什么。