“程序‘x’当前未安装”后要求安装程序

“程序‘x’当前未安装”后要求安装程序

如果您尝试执行未安装的程序,您将收到一条消息

The program 'x' is currently not installed. You can install it by typing: 
sudo apt-get install x

而不是让你安装该程序,而是你必须输入实际的命令。如何改变这种行为?

答案1

造成这种行为的包是找不到命令安装命令未找到软件包,它已经包含了所需的行为,尽管默认情况下禁用了它。您可以通过将以下行添加到您的~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

现在行为改为

The program 'x' is currently not installed. You can install it by typing:
sudo apt-get install x
Do you want to install it? (N/y)

笔记: 如果你收到有关 Python 崩溃的消息(具体来说AttributeError: 'str' object has no attribute 'decode'),这是错误 1073919。已为 Raring 和 Saucy 提供修复。或者 (仅限高级用户),您可以更改该文件/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py,查看错误报告附带的差异以了解需要更改的行。

编辑:该修复现已在 Raring(SRU)的 0.3ubuntu7.1 版本和 Saucy 的 0.3ubuntu8 版本中发布。

答案2

我的解决方案是安全性和舒适性的结合:

auto-apt 检查在其环境中运行的程序的文件访问权限,如果程序尝试访问已知属于未安装软件包的文件,auto-apt 将使用 apt-get 安装该软件包。此功能需要 apt 和 sudo 才能运行。它还提供简单的数据库来搜索哪个软件包包含请求的文件。

它是一个终端仿真器,您可以在其中进入一个环境,其中每个文件访问都会通过 auto-apt 进行预先验证,如果不存在,它会在数据库中搜索(a la apt-file)并下载并安装所需的软件包,然后允许程序继续。您应该以 root 身份执行它:

sudo auto-apt

当您正在构建一个包但不想站在屏幕前查找每个配置错误(例如缺少标题等)时,此功能很有用。

这也可以用作 apt-get + apt-file 的替代品,您只需告诉command执行它就可以安装程序。

您必须明白,当您的系统未被监视时,您不应该将其保持打开状态,因为这几乎就像您正在使用 root 用户一样。

手册页:http://derpi.tuwien.ac.at/cgi-bin/man/man2html?1+auto-apt

答案3

自动安装不是一个好主意。如果你想省去一些输入,你可以使用

sudo apt-get install !!

其中!!将被历史中的最后一个命令替换。您可能也可以将其设为别名,但我不知道如何在!!不评估它的情况下添加。

不过,正如@eliah-kagan 和@gertvdijk 在评论中提到的那样,也有一些注意事项。有些程序的包名与您要执行的二进制文件不同。此外,在将参数传递给二进制文件时,这可能会导致一些意外结果。

答案4

有几种方法可以快速安装建议的包:

  • 添加export COMMAND_NOT_FOUND_INSTALL_PROMPT=1到类似的地方~/.bashrc

    这是“最酷”的方式,虽然显然不太安全,但大概 90% 的时间都会引起内心的“谢谢,这正是我想要你做的!”的反应。

    (这种方法的一个个人缺点是我似乎发现答案很难记住/搜索,所以到目前为止我倾向于不使用它。)

  • 如果您使用的是默认终端,则可以快速选择该行并单击鼠标中键将其直接粘贴到命令行中。(其他终端或 SSH 应用程序可能有不同的方法。)

    在实践中,我倾向于发现这足够快,并且“意外地”做到这一点稍微困难一些,并且不需要任何事先设置,所以我倾向于这样做。

  • 不过,如果你可以(或者想要学习)快速打字,那就sudo apt install packagename直接打字吧。

    它可以帮助您锻炼肌肉记忆,也意味着您必须阅读并输入软件包名称,这意味着您将来可能会更容易记住它。在较新的 Ubuntu 版本中,它也稍微容易一些,因为它apt代替了apt-get

相关内容