Debianシステムでnodejs Spawnを使用して次のコマンドを実行したいとします: /usr/bin/apt-get upgrade -s | tail -1 | cut -f1 -d' '
将来はrootのみのコマンドを使用するため、私は(私が正しいコマンドでvisudoをファイルを更新します)フルシェルアクセスを許可したくない ここで私が原因で「-d」「」パラメータのエラーを持って一度実行私のコードunixコマンドのnode_sにspawnをパラメータに入れて
const apt = spawn('/usr/bin/apt-get', ['upgrade', '-s']);
const tail = spawn('tail', ['-1']);
const cut = spawn('cut', ['-f1', '-d" "']);
apt.stdout.on('data', (data) => {
tail.stdin.write(data);
});
tail.stdout.on('data', (data) => {
cut.stdin.write(data);
});
cut.stdout.on('data', (data) => {
console.log(data.toString());
});
apt.stderr.on('data', (data) => {
console.log("apt stderr: ${data}");
});
tail.stderr.on('data', (data) => {
console.log("tail stderr: ${data}");
});
cut.stderr.on('data', (data) => {
console.log("cut stderr: ${data}");
});
apt.on('close', (code) => {
if (code !== 0) {
console.log("apt process exited with code ${code}");
}
});
tail.on('close', (code) => {
if (code !== 0) {
console.log("tail process exited with code ${code}");
}
});
cut.on('close', (code) => {
if (code !== 0) {
console.log("cut process exited with code ${code}");
}
});
res.status(200).json('');
ですそれは認識されません。私はそれだけである必要があり、二重\でスペースをエスケープしてみてくださいまたは
ありがとうチャールズ!それは働いて、私も理解しました;-)私はシェルの必要性を逃しました もう一つのポイント:それは '/ bin/grep -P '^ \ d + upgraded''iのようなコマンドは' spawn 'grep'、['-P'、 '^ \\ d +'、 'upgraded' ']) '? –
''^ \ d + upgraded''はシェルによって単一の文字列に構文解析されるので、' 'spawn(' grep '、[' -P '、'^\\ d + upgraded ']) 'JavaScriptで同じ文字列を書き込むことができます。 –
いくつかの場所から始めます。シェル側での動作を理解するにはhttp://mywiki.wooledge.org/Quotesまたはhttp://wiki.bash-hackers.org/syntax/quoting、http:// mywiki.wooledge.org/BashParser –