如果您需要简单(但正确)的解决方案,可以使用以下方法:
function escapeShellArg (arg) {
return `'${arg.replace(/'/g, `'\\''`)}'`;
}
所以正如Chris Johnsen所提到的那样,您的字符串将简单地用单引号进行转义。
echo 'John'\''s phone';
它在
bash
中起作用是因为采用了
强引用,感觉在
fish
中也能正常工作,但在
zsh
和
sh
中无法正常工作。
如果你有
bash
,你可以使用
'bash -c \'' + escape('all-the-rest-escaped') + '\''
在
sh
或
zsh
中运行脚本。
但实际上... 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('; ')]);
祝你有美好的一天!
echo 'don'\''t do that'
命令。 - mikemaccanachild_process
模块... - code