./eagle 执行,但是 `bash eagle` 不执行

Met*_*maz 3 bash bashrc

下载 Eagle 7.6 后,我想为其添加别名。即使./eagle打开应用程序,bash eagle结果cannot execute binary file错误。我试过了,chmod +x eagle但没有帮助。下载的版本是64位版本。

我创建的别名如下:

alias eagle='bash /home/metin/eagle-7.6.0/bin/eagle'
Run Code Online (Sandbox Code Playgroud)

如果你想知道,这里是uname -a输出:

Linux mettinoktay 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC
2016 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

提前致谢。

ter*_*don 20

那是因为eagle是编译的可执行文件,而不是 bash 脚本。您会感到困惑,因为您经常看到bash ./script建议作为运行保存在文本文件中的 bash 脚本的一种方式script。例如:

$ cat foo.sh
echo "hello!"
$ bash ./foo.sh
hello!
Run Code Online (Sandbox Code Playgroud)

因此,该命令bash ./foo.sh实际上意味着“运行bash并要求它执行文件中找到的命令foo.sh”。但是,二进制可执行文件不是 shell 脚本,它们不是简单命令的列表,不能以这种方式运行。例如,如果您尝试ls使用bash以下命令运行二进制文件:

$ bash /bin/ls
/bin/ls: /bin/ls: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)

bash告诉你它不能运行你告诉它运行的东西,因为它是一个二进制文件,而不是一个包含脚本的文本文件。

因此,要解决您的问题,只需bash从别名中删除,而是将其指向eagle可执行文件的实际位置:

alias eagle='/home/metin/eagle-7.6.0/bin/eagle'
Run Code Online (Sandbox Code Playgroud)

另外,添加/home/metin/eagle-7.6.0/bin/到您的$PATH加入这行到你~/.bashrc

PATH="$PATH:/home/metin/eagle-7.6.0/bin/"
Run Code Online (Sandbox Code Playgroud)

这将允许您/home/metin/eagle-7.6.0/bin/按名称执行任何可执行文件(eagle在这种情况下通过运行),就像您对任何其他可执行文件(例如它bash自己或ls.


Met*_*maz 5

bash 必须从别名中删除,即:

alias eagle='/home/metin/eagle-7.6.0/bin/eagle'
Run Code Online (Sandbox Code Playgroud)

@doug 在评论中解决了这个问题。