繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM