我想在Debian系統上執行使用的NodeJS菌種以下命令: /usr/bin/apt-get upgrade -s | tail -1 | cut -f1 -d' '
我想用產卵並沒有因爲根的未來重複使用exec命令只和我不想讓一個完整的shell訪問(我將更新與正確的命令visudo命令文件) 這裏是我的代碼菌種中的NodeJS的unix命令與參數空間
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('');
一旦執行我有,因爲「-d」「」參數的錯誤這是不被承認的。我嘗試用雙\逃逸的空間或兩者,但仍錯誤分裂參數
謝謝Charles!這工作,我也明白爲什麼;-)我錯過了殼的需求 另一點:這意味着像'/ bin/grep -P'^ \ d +升級''i這樣的命令將不得不像'spawn( 'grep',['-P','「^ \\ d +','upgraded''])'? –
''^ \ d + upgraded''被shell解析爲單個字符串(這是語法單引號的效果之一),所以它會被'spawn'('grep',['-P','^\\ d +升級'])'在JavaScript中編寫相同的單個字符串。 –
有些地方開始重新:理解這如何在shell一邊工作可能是http://mywiki.wooledge.org/Quotes或http://wiki.bash-hackers.org/syntax/quoting和http:// mywiki.wooledge.org/BashParser –