nodejs:有效的命令行提示符不会执行或生成 ENOENT 错误



我有一个bash命令(debian 10,GNU bash,版本5.0.3(1(-发行版(x86_64-pc-linux-GNU((:

documents=("/data/sice.pdf" "/das00/12ser.pdf");bash ./clean-pdfs.sh "${documents[*]}"

当我粘贴到终端时,它就起作用了。

然而,使用exec或spawn调用它失败,并且没有给出明确的错误消息。

当我用exec运行它时,我收到了一些关于括号的抱怨。记住输出相当大,我选择了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=分配环境变量

要将派生进程的输出打印到控制台,我们可以使用选项stdio: 'inherit'

这两种设置都记录在此处:https://nodejs.org/api/child_process.html#child_processspawncommand-args选项

这是我在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' })

相关内容

  • 没有找到相关文章