在“当前未安装程序'x'”后询问安装程序


18

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

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

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

Answers:


17

负责此行为的程序包是“ 找不到命令”安装未找到的命令程序包,尽管默认情况下已禁用,但它已包含所需的行为。您可以通过将以下行添加到~/.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'),则为bug 1073919。修复了针对Racing和Saucy的问题。或者,(仅适用于高级用户),您可以更改文件/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py,有关需要更改的行,请参见bugreport中的diff。

编辑:该修复程序现已在Raring(SRU)的0.3ubuntu7.1版本中发布,并在Saucy中针对0.3ubuntu8发布。


1

我的解决方案是安全性和舒适性之间的混合体:

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

这是一个终端仿真器,您可以在其中进入一个环境,在该环境中,每个文件的访问都将通过自动apt事先进行验证,如果不存在,则在数据库中搜索(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


0

自动安装将不是一个好主意。如果您要保存一些键入内容,可以使用

sudo apt-get install !!

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

但是,有一些警告,如@ eliah-kagan和@gertvdijk在评论中所述。某些程序与要执行的二进制文件具有不同的程序包名称。另外,将参数传递给二进制文件时,这可能会导致某些意外结果。


当然,我知道我的建议不是一个很好的解决方案,但是它可以根据用户需求“足够好”地工作。
l3dx

5
命令名称(系统上二进制文件的文件名)不一定与程序包名称相同。
gertvdijk

3
l3dx:尽管我仍然有疑虑(包括@gertvdijk的观点,即包名和命令名经常不同,并且担心传递给原始命令的其他命令行参数可能会产生非常不好的影响),但看来您正在做些事情。经过一些测试,看来它在实践中比在理论上更有效(我认为)。我仍然建议您扩展此答案,以进行澄清,警告,并可能详细介绍其他选项。在任何情况下,我都对此投票,但已删除我的投票。
伊利亚·卡根

0

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

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

    这是“最酷”的方式,尽管显然不那么安全,但是大概90%的时间会引发内部“谢谢,这正是我想要您做的!” 响应。

    (此方法的一个个人缺点是,我似乎很难找到答案/难以找到答案,因此到目前为止,我往往并没有使用太多。)

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

    在实践中,我倾向于很快地找到它,并且“偶然地”很难做到这一点,并且不需要任何事先设置,我倾向于这样做。

  • 不过,有话要说-如果您可以(或想学习)快速输入- sudo apt install packagename直接输入。

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


1
您可能~/.bashrc不是~/.bash_rc
edwinksl

谢谢,我可能在想.bash_profile
mwfearnley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.