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