为什么我不能运行从存档中提取的程序?

Lee*_*eek 2 executable software-installation

下载了 Sage 的档案, 火狐和雷鸟从他们在 Trisquel 6.0 上各自的网站,点击适当的 shell 脚本或执行命令来运行程序都不会打开它们。查看文件的权限,它们确实是可执行的。

编辑:Firefox 和 Thunderbird 现在神秘地开始工作;然而,Sage 仍然无法操作。从本页的第一个链接下载后,将其解压缩到我的桌面(Firefox 和 Thunderbird 运行得很好),在终端中打开文件夹并运行命令“sage”(因为在文件夹)我收到错误:bash: sage: command not found。然而ls -l 显示已知文件存在并且是可执行的。

编辑 #2:我只认为 Firefox 和 Thunderbird 正在工作。我实际上正在运行我已经安装的版本。运行 Firefox 和/或 Thunderbird./[executable]出现错误libxul.so: cannot open shared object file: No such file or directory Couldn't load XPCOM.

Gil*_*il' 5

从存档中提取程序后要检查的第一件事是权限 ( chmod a+x ./sage),但如果这是问题所在,错误消息将是“权限被拒绝”而不是“未找到命令”。

给出您的描述“在终端中打开文件夹并运行命令”,很可能您运行了该命令,sage希望在当前目录中执行具有此名称的程序。Unix 不是这样工作的:shell 只在PATH环境变量中列出的目录中查找程序。它不会首先隐式搜索当前目录。要在当前目录中运行程序,您需要输入其路径:

./sage
Run Code Online (Sandbox Code Playgroud)

如果您想在不指定路径的情况下运行该程序,则需要将其安装在您的目录中$PATH(通常为/usr/local/bin~/bin)。将可执行文件与应用程序中的其他文件放在一起通常很方便,并在以下目录中建立一个符号链接$PATH

ln -s /path/to/sage-5.9/sage ~/bin/
Run Code Online (Sandbox Code Playgroud)

或者如果您已经在包含sage二进制文件的目录中:

ln -s $PWD/sage ~/bin/
Run Code Online (Sandbox Code Playgroud)

如果您刚刚在 PATH 中的目录中添加了一个程序,而您的 shell 仍然抱怨找不到该命令,这可能是因为您之前尝试过并且您的 shell 将“未找到”信息保存在缓存中。运行hash -r以重建缓存并重试。下次启动 shell 时,这将不再是问题,因为在 shell 运行之间不会保存缓存。

如果您使用指定路径执行存在的文件,并且您收到“找不到命令”的错误消息,则可能是因为您没有正确的 loader。如果您下载了 CPU 和内核支持的二进制文件,但没有所需的用户空间支持(没有库),就会发生这种情况。如果程序是一个脚本,它的shebang 行引用了系统上不存在的解释器(尽管在这种情况下典型的shell 会给出“错误的解释器”消息而不是“找不到命令”),也会发生这种情况。