./eagle 执行,但是 `bash eagle` 没有执行

./eagle 执行,但是 `bash eagle` 没有执行

下载 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'

如果你想知道的话,下面是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

提前致谢。

答案1

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

$ cat foo.sh
echo "hello!"
$ bash ./foo.sh
hello!

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

$ bash /bin/ls
/bin/ls: /bin/ls: cannot execute binary file

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

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

alias eagle='/home/metin/eagle-7.6.0/bin/eagle'

或者,通过将这一行添加/home/metin/eagle-7.6.0/bin/到您的:$PATH~/.bashrc

PATH="$PATH:/home/metin/eagle-7.6.0/bin/"

这样您就可以通过/home/metin/eagle-7.6.0/bin/名称执行任何可执行文件(在本例中是通过运行eagle),就像您对任何其他可执行文件(如其bash本身或)执行的操作一样ls

答案2

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

alias eagle='/home/metin/eagle-7.6.0/bin/eagle'

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

相关内容