Почему моя команда exec не работает, но работает, если команда передана в терминале?
По какой-то причине я не понимаю, почему у меня проблема с моим exec
, и я считаю, что правильно следил за документацией и примерами, на которые ссылался. Когда я запускаю эту команду в терминале, у меня нет проблем:
gitleaks --repo=https://github.com/user/repo -v --username=foo --password=bar
но когда я пытаюсь закодировать его как модуль, чтобы вызвать его в package.json:
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)
}
})()
но я продолжаю получать ошибку:
{ 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' }
Я попытался изучить свою проблему, чтобы узнать, не упускаю ли я что-то, и прочитал:
- Ошибка команды nodejs exec без полезного сообщения об ошибке
- Ошибка выполнения команды дочернего процесса узла с кодом ошибки 1
- Команда nodejs exec не работает для некоторых команд Windows без четкого сообщения об ошибке
- Ошибка команды EXEC дочернего процесса NodeJS с отказом в разрешении NVM OSX
Почему мой exec
команда не работает, но я могу передать ту же команду в терминал, и она работает?
1 ответ
Когда exec
функция запускает команду, она проверяет код выхода из этой команды. Он предполагает, что код выхода, отличный от 0, является ошибкой, и поэтому передает ошибку в обратном вызове. Еслиgitleaks
находит секреты в репо, затем выходит с кодом 1.
Что-то в этом роде должно работать:
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)
}
})()