[英]nodejs: valid command line prompt doesn't exec or spawn with ENOENT error
我有一个 bash 命令(debian 10,GNU bash,版本 5.0.3(1)-release (x86_64-pc-linux-gnu)):
documents=("/data/sice.pdf" "/das00/12ser.pdf");bash ./clean-pdfs.sh "${documents[*]}"
当我粘贴到终端时有效。
但是,使用 exec 或 spawn 调用它会失败,而不会给出明确的错误消息。
当我用exec
运行它时,我收到了一些关于括号的投诉。 记得 output 很大,我选择了spawn
const { exec } = require('child_process');
command = `documents=(${pdfPaths});` + 'bash ./clean-pdfs.sh "${documents[*]}"'
console.log(command);
const subProcess = require('child_process')
const lsChildProcess = subProcess.spawn(command)
lsChildProcess.stdout.on('data', (data) => {
console.log(data);
})
lsChildProcess.on('error', function(err) {
console.log(err);
});
运行此 nodejs 脚本后,我收到以下错误消息,该消息不是很有帮助(出于安全原因,我更改了路径):
{ Error: spawn documents=("/data/Traa.pdf" "/dater.pdf");bash ./clean-pdfs.sh "${documents[*]}" ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
at onErrorNT (internal/child_process.js:415:16)
at process._tickCallback (internal/process/next_tick.js:63:19)
errno: 'ENOENT',
code: 'ENOENT',
syscall:
'spawn documents=("/daice.pdf" "/daer.pdf");bash ./clean-pdfs.sh "${documents[*]}"',
path:
'documents=("/dace.pdf" "/daer.pdf");bash ./clean-pdfs.sh "${documents[*]}"',
spawnargs: [] }
此处需要选项shell
(两个条件都适用):
document=
分配环境变量。 要将生成的进程的 output 打印到控制台,我们可以使用选项stdio: 'inherit'
。
这两个设置都记录在此处: https://nodejs.org/api/child_process.html#child_processspawncommand-args-options
这是我能够在 zsh 终端上成功测试的代码版本。 我正在使用spawnSync
,因为它在没有回调的情况下更容易处理,但spawn
也能正常工作。
const pdfPaths = '"/data/sice.pdf" "/das00/12ser.pdf"';
command = `documents=(${pdfPaths});` + 'bash ./clean-pdfs.sh "${documents[*]}"'
console.log(command);
const subProcess = require('child_process')
subProcess.spawnSync(command, { shell: true, stdio: 'inherit' })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.