如果您尝试执行未安装的程序,您将收到一条消息
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
。