首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的exec命令失败了,但是如果命令在终端中传递,它就能工作?

为什么我的exec命令失败了,但是如果命令在终端中传递,它就能工作?
EN

Stack Overflow用户
提问于 2020-04-15 14:20:12
回答 1查看 3.9K关注 0票数 3

由于某些原因,我不明白为什么我的exec命令有问题,我相信我遵循了我正确引用的文档和示例。当我在终端中运行这个命令时,没有问题:

代码语言:javascript
运行
复制
gitleaks --repo=https://github.com/user/repo -v --username=foo --password=bar

但是,当我尝试将它编码为一个模块时,我可以在package.json中调用它:

代码语言:javascript
运行
复制
const { exec } = require("child_process")
const test = `gitleaks --repo=https://github.com/user/repo -v --username=foo --password=bar`

const execRun = (cmd) => {
  return new Promise((resolve, reject) => {
    exec(cmd, (error, stdout, stderr) => {
      if (error) reject(error)
      resolve(stdout ? stdout : stderr)
    })
  })
}

(async () => {
try {
  const testing = await execRun(test)
  console.log(testing)
} catch (e) {
  console.log(e)
}
})()

但我继续搞错了:

代码语言:javascript
运行
复制
{ Error: Command failed: gitleaks --repo=https://github.com/user/repo -v --username=foo --password=bar

    at ChildProcess.exithandler (child_process.js:294:12)
    at ChildProcess.emit (events.js:198:13)
    at maybeClose (internal/child_process.js:982:16)
    at Socket.stream.socket.on (internal/child_process.js:389:11)
    at Socket.emit (events.js:198:13)
    at Pipe._handle.close (net.js:606:12)
  killed: false,
  code: 1,
  signal: null,
  cmd:
   'gitleaks --repo=https://github.com/user/repo -v --username=foo --password=bar' }

我试着研究我的问题,看看我是不是遗漏了什么,然后读到:

为什么我的exec命令失败了,但我可以在终端中传递相同的命令,而且它可以工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-15 15:03:21

exec函数运行一个命令时,它会检查该命令的退出代码。它假定除0以外的退出代码是错误,因此在回调中传递错误。如果gitleaks在回购中发现了秘密,那么它就会使用代码1退出。

这样的东西应该能起作用:

代码语言:javascript
运行
复制
const { exec } = require("child_process")
const test = `gitleaks --repo=https://github.com/user/repo -v --username=foo --password=bar`

const execRun = (cmd) => {
  return new Promise((resolve, reject) => {
    exec(cmd, (error, stdout, stderr) => {
      if (error) {
        if (error.code === 1) {
          // leaks present
          resolve(stdout);
        } else {
          // gitleaks error
          reject(error);
        }
      } else {
        // no leaks
        resolve(stdout);
      }
    })
  })
}

(async () => {
try {
  const testing = await execRun(test)
  console.log(testing)
} catch (e) {
  console.log(e)
}
})()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61231106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档