如果您需要简单(但正确)的解决方案,您可以使用:
function escapeShellArg (arg) {
return `'${arg.replace(/'/g, `'\\''`)}'`;
}
所以你的字符串将像 Chris Johnsen 提到的那样简单地用单引号转义。
echo 'John'\''s phone';
它的工作原理bash
是因为强烈的报价,感觉像它也适用于fish
,但不会在工作zsh
和sh
。
如果您有bash
您可以在运行脚本sh
或zsh
使用'bash -c \'' + escape('all-the-rest-escaped') + '\''
。
但实际上...... node.js 将为您转义所有需要的字符:
var child = require('child_process')
.spawn('echo', ['`echo 1`;"echo $SSH_TTY;\'\\0{0..5}']);
child.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
child.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
此代码块将执行:
echo '`echo 1`;"echo $SSH_TTY;'\''\\0{0..5}'
并将输出:
stdout: `echo 1`;"echo $SSH_TTY;\'\\0{0..5}
或一些错误。
看看http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
顺便说一句,运行一堆命令的简单解决方案是:
require('child_process')
.spawn('sh', ['-c', [
'cd all/your/commands',
'ls here',
'echo "and even" > more'
].join('; ')]);
祝你今天过得愉快!