Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法为Node命令执行二进制文件_Node.js_Linux_Bash - Fatal编程技术网

Node.js 无法为Node命令执行二进制文件

Node.js 无法为Node命令执行二进制文件,node.js,linux,bash,Node.js,Linux,Bash,当我执行: /bin/sh-xe节点-v 我得到错误:节点:节点:无法执行二进制文件 请建议我需要做什么来解决此错误 当我执行以下命令时: 文件/bin/bash 输出:/bin/bash:ELF 64位LSB可执行文件,x86-64,版本1(SYSV),动态链接(使用共享libs),适用于GNU/Linux 2.6.18,已剥离 文件节点 node:ELF 64位LSB可执行文件,x86-64,版本1(GNU/Linux),动态链接(使用共享libs),用于GNU/Linux 2.6.18,没

当我执行: /bin/sh-xe节点-v 我得到错误:节点:节点:无法执行二进制文件

请建议我需要做什么来解决此错误

当我执行以下命令时:

文件/bin/bash 输出:/bin/bash:ELF 64位LSB可执行文件,x86-64,版本1(SYSV),动态链接(使用共享libs),适用于GNU/Linux 2.6.18,已剥离

文件节点
node:ELF 64位LSB可执行文件,x86-64,版本1(GNU/Linux),动态链接(使用共享libs),用于GNU/Linux 2.6.18,没有剥离

出于好奇,我在cygwin中玩了一点,得到了以下结果(让我吃惊):

更新:

我刚刚意识到另一个陷阱——命令行参数。以下示例说明了这一点:

$ cat >test-arg.c <<EOF
> #include <stdio.h>             
> 
> int main(int argc, char **argv)
> {
>   for (int i = 0; i < argc; ++i) printf("argv[%d]: '%s'\n", i, argv[i]);
>   return 0;
> }
> EOF

$ gcc -std=c11 -o test-arg test-arg.c

$ ./test-arg arg1 arg2 arg3
argv[0]: './test-arg'
argv[1]: 'arg1'
argv[2]: 'arg2'
argv[3]: 'arg3'

$ bash -c ./test-arg arg1 arg2 arg3
argv[0]: './test-arg'

$ 
这一次,我在没有咨询
man bash
的情况下找到了解决方案:

$ bash -xec "./test-arg arg1 arg2 arg3"
+ ./test-arg arg1 arg2 arg3
argv[0]: './test-arg'
argv[1]: 'arg1'
argv[2]: 'arg2'
argv[3]: 'arg3'

$

要进行一次调用,命令和参数必须“一起引用”。

我刚刚学到了很多关于“无法执行二进制文件”的知识,这主要是由不兼容的二进制文件引起的。你的情况不像这样。隐马尔可夫模型。。。愚蠢的问题:您的节点文件是否具有可执行(aka x)权限?是的,当我在不使用bash的情况下执行时,它具有权限。。然后直接输入#node-v,我得到所需的输出:#node-v8.1.0I甚至可以在cygwin中重现您的问题。我刚刚发现我可以在cygwin的bash中运行一个自编译的二进制文件(例如,
$./test-int.exe
),但我不能这样称呼它:
$bash./test-int.exe
准确地获取您的错误。第一个猜测:我必须提供完整的路径,但这没有帮助。我仍在试图找出发生了什么…您是否使用
节点
应用程序对其进行了测试<代码>test-int.exe
是我自己做的事情。(我应该适当地编辑答案。)是的,我只在linux上测试了我的节点应用程序。。它进入bashshell并请求参数。。如下所示:/bin/bash-xec/usr/local/bin/node/u03/node_modules/tslint/bin/tslint--format--out result.json+/usr/local/bin/node>>>可能是,值得编辑您的问题并将其添加为更新。请同时复制shell的输出。(请不要忘记使用工具栏中的{}按钮格式化代码片段。)正如您在我的示例中所看到的,
-x
导致调试输出
+。/test int
。在你的案例中是否出现了类似的情况?我想我也发现了第二个问题。请看我的更新。
$ cat >test-arg.c <<EOF
> #include <stdio.h>             
> 
> int main(int argc, char **argv)
> {
>   for (int i = 0; i < argc; ++i) printf("argv[%d]: '%s'\n", i, argv[i]);
>   return 0;
> }
> EOF

$ gcc -std=c11 -o test-arg test-arg.c

$ ./test-arg arg1 arg2 arg3
argv[0]: './test-arg'
argv[1]: 'arg1'
argv[2]: 'arg2'
argv[3]: 'arg3'

$ bash -c ./test-arg arg1 arg2 arg3
argv[0]: './test-arg'

$ 
$ bash -xec ./test-arg arg1 arg2 arg3
+ ./test-arg
argv[0]: './test-arg'

$
$ bash -xec "./test-arg arg1 arg2 arg3"
+ ./test-arg arg1 arg2 arg3
argv[0]: './test-arg'
argv[1]: 'arg1'
argv[2]: 'arg2'
argv[3]: 'arg3'

$