当我执行时: / bin / sh -xe node -v 我收到错误:node:node:无法执行二进制文件
请建议我需要采取哪些措施来解决此错误。
当我执行以下命令时:
file / bin / bash 输出:/ bin / bash:ELF 64位LSB可执行文件,x86-64,版本1(SYSV),动态链接(使用共享库),用于GNU / Linux 2.6.18,剥离
文件节点 node:ELF 64位LSB可执行文件,x86-64,版本1(GNU / Linux),动态链接(使用共享库),用于GNU / Linux 2.6.18,未剥离
答案 0 :(得分:1)
出于好奇,我在我的cygwin中玩了一点,得到了这个(对我来说很惊讶)结果:
$ cat >test-int.c <<EOF
> #include <stdio.h>
>
> int main(int argc, char **argv)
> {
> printf("sizeof (128): %u\n", sizeof (128));
> printf("sizeof (4294967296): %u\n", sizeof (4294967296));
> printf("sizeof (281474976710656): %u\n", sizeof (281474976710656));
> return 0;
> }
> EOF
$ gcc -std=c11 -o test-int test-int.c
$ ./test-int
sizeof (128): 4
sizeof (4294967296): 8
sizeof (281474976710656): 8
$ bash -xe ./test-int
./test-int: ./test-int: cannot execute binary file
$
经过一番搜索,我发现了它。实际上,你和我偶然发现了陷阱......
根据man bash
(靠近顶部):
如果参数处理后仍然存在参数,则-c和-c都不存在 -s选项已被提供,第一个参数被假定为 包含shell命令的文件的名称。
了解了这一点后,我尝试了:
$ bash -c ./test-int
sizeof (128): 4
sizeof (4294967296): 8
sizeof (281474976710656): 8
$ bash -xec ./test-int
+ ./test-int
sizeof (128): 4
sizeof (4294967296): 8
sizeof (281474976710656): 8
$
<强>更新强>
我刚刚意识到另一个陷阱 - 命令行参数。以下示例说明了这一点:
$ 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'
$
这一次,我在没有咨询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'
$
要进行一次通话,命令和参数必须一起引用&#34;。