単純な(しかし正しい)ソリューションが必要な場合は、次を使用できます。
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('; ')]);
良い1日を!