节点:在shell exec

时间:2018-08-15 18:13:03

标签: node.js bash shell escaping child-process

我当前正在将JSON写入文件,并将其通过管道传递给Shell命令:

const { exec } = require('child_process');
fs.writeFileSync('file.json', JSON.stringify(data), 'utf8');
exec(`cat file.json | ./binary_file`, {}, callback);

除了写入文件之外,如何安全地通过Node打印/传递给我的binary_file

const { exec } = require('child_process');
exec(`echo '${JSON.stringify(data)}' | ./binary_file`, {}, callback);

是否有某种方法可以安全地转义字符串以执行Shell,还是有更好的方法来完成此操作?

或者,写/读文件更安全吗?

1 个答案:

答案 0 :(得分:1)

如果不运行shell,shell将不会破坏您的数据:

const { spawn } = require('child_process');
const p = spawn('/path/to/your_executable');

// Write arbitrary data on stdin instead of
// passing it through a shell to have echo do it
p.stdin.write("{!`$)(*%]");

// Make sure to close stdin afterwards
p.stdin.end();