node.js中的execSync;无法正确运行shell命令
execSync in node.js doesn't run shell command properly
我正试图在node.js中运行一个child_process.execSync
shell命令,如下所示:
function test() {
return new Promise(function(resolve, reject) {
var execSync = require('child_process').execSync;
var result = execSync('some executable I manually installed', { encoding: 'utf8', silent: true });
if (result.search('something') > -1) {
resolve("ok");
}
else if (result.search('something else') {
resolve("nok");
}
else {
reject(Error("ERROR"));
}
});
}
test().then(function(result) {
console.log(result);
}, function(err) {
console.log(err);
});
但是,我得到以下错误作为输出。
{ [Error: Command failed: my shell command]
error: null,
cmd: 'my shell command',
file: '/bin/sh',
args: [ '/bin/sh', '-c', 'my chell command' ],
options:
{ silent: true,
encoding: 'utf8',
file: '/bin/sh',
args: [ '/bin/sh', '-c', 'my shell command' ],
envPairs:
[ 'TERM_PROGRAM=Apple_Terminal',
'SHELL=/bin/bash',
'TERM=xterm-256color',
'TMPDIR=/var/folders/k5/qklhpvtj227_5vdnn2d_x6zr0000gn/T/',
'Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.2zYqrvejoj/Render',
'TERM_PROGRAM_VERSION=361.1',
'OLDPWD=/usr/local/bin',
'TERM_SESSION_ID=8F8D0040-84DE-41F4-84E6-A9481A09CE73',
'USER=and',
'SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.L5VoA4PiFl/Listeners',
'__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0',
'PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin',
'PWD=/Users/and/Documents/',
'XPC_FLAGS=0x0',
'XPC_SERVICE_NAME=0',
'SHLVL=1',
'HOME=/Users/and',
'LOGNAME=and',
'LC_CTYPE=UTF-8',
'DISPLAY=/private/tmp/com.apple.launchd.rwoZybokZk/org.macosforge.xquartz:0',
'_=/usr/local/bin/node' ],
stdio: [ [Object], [Object], [Object] ] },
envPairs:
[ 'TERM_PROGRAM=Apple_Terminal',
'SHELL=/bin/bash',
'TERM=xterm-256color',
'TMPDIR=/var/folders/k5/qklhpvtj227_5vdnn2d_x6zr0000gn/T/',
'Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.2zYqrvejoj/Render',
'TERM_PROGRAM_VERSION=361.1',
'OLDPWD=/usr/local/bin',
'TERM_SESSION_ID=8F8D0040-84DE-41F4-84E6-A9481A09CE73',
'USER=and',
'SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.L5VoA4PiFl/Listeners',
'__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0',
'PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin',
'PWD=/Users/and/Documents/',
'XPC_FLAGS=0x0',
'XPC_SERVICE_NAME=0',
'SHLVL=1',
'HOME=/Users/and',
'LOGNAME=and',
'LC_CTYPE=UTF-8',
'DISPLAY=/private/tmp/com.apple.launchd.rwoZybokZk/org.macosforge.xquartz:0',
'_=/usr/local/bin/node' ],
stderr: '',
stdout: '',
pid: 16931,
output: [ null, '', '' ],
signal: null,
status: 10 }
我认为这与/bin/sh
有关(顺便说一句,我是OSX),但我不知道如何解决这个问题。我可以在终端中运行shell命令,它在带有execSync的节点中不起作用。此外,当我尝试使用OS X附带的命令(如ls
)运行execSync
时,它运行得非常好。。。
有人能帮忙吗?谢谢
如果最后一个exec程序返回错误代码,例如在这个C代码上
#include <stdio.h>
int main(void)
{
printf("hi");
return 1;
}
关键是如果程序没有返回0节点子进程抛出错误
我的解决方案:
const proc = require('child_process');
// just add " || true" after your command
var output = proc.execSync('command || true');
它对我来说很好:)
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- 如何在 JavaScript 中运行 shell 命令
- 代码在shell中运行,但提供'可以't查找变量'从文件运行时出错
- 如何在 Atom-Shell 中运行 reload() 和 open()
- 在 Javascript 中运行命令 Wscript.shell ActiveX
- 找不到从 CLI 运行 PHP 的 grunt-shell 任务
- 运行FTP(JavaScript中的命令shell)服务器端
- 使用 node.js (子进程) 运行 shell 脚本
- 如何使用 shell 脚本文件运行我的节点脚本
- node.js中的execSync;无法正确运行shell命令
- Gnome shell扩展:如何使用管道运行命令
- 运行mongoDB shell的JavaScript引擎是什么?
- Nodejs ui页面是否可以运行shell cmd到远程机器并运行脚本
- 显示从Jscript运行的shell命令的输出
- 为mongo shell运行js文件
- Electron (Atom-Shell)从页面中的链接运行unix命令
- ActiveXObject运行不返回(shell)
- 有没有任何非Windows方式可以从本地.html文件运行shell命令