无法使用 bash 程序执行二进制文件但可以使用 ./program 运行

无法使用 bash 程序执行二进制文件但可以使用 ./program 运行

我想在 bash 上运行 unity3d 来放置别名和 .desktop 条目。然而,事实证明这更困难。

出现标题错误我尝试命令:

bash path/to/program 

搜索网站后发现似乎存在兼容性问题。因此,当我尝试使用文件命令时,输出结果为:

program: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=8020f3d60eff5b41c53e6b60a9e2d43802e28f93, not stripped

而我的系统是x86_64。

然而当我直接进入文件夹并运行该程序时

./program

程序运行通常情况下

我不明白为什么这会成为我的系统兼容性问题,因为我可以用 ./program 运行该程序,但不能用 bash program 运行。

需要注意的是,我正在使用 zsh,我不确定这是否会造成任何干扰。

答案1

当您执行 时bash some/file,bash 会读取该文件,根据 bash 的语法规则解析其内容并执行生成的命令。有效文件通常称为“脚本”,其内容与您在 shell 中实际输入的内容非常相似。编译后的程序包含机器指令。您使用 zsh - 您希望它理解机器指令吗?Zsh 不能,bash 也不能。

如果要使用 bash 执行命令,请使用以下-c选项:

bash -c '/some/command'

但是当命令本身可执行时,这样做就没有什么意义了。如果你可以使用 运行它/some/command,那么直接使用它。

答案2

在 bash、zsh 或其他 shell 的命令提示符下,您可以写入/path/to/programcd /path/to; ./program两者都应该给出相同的结果..即程序运行。

文件告诉您它是一个二进制可执行程序......而不是某些语言中需要由某些 shell 或其他程序解释的脚本。

相关内容