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

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

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

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

负责此行为的程序包是命令未找到 安装命令未找到 虽然默认情况下已禁用,但它已包含所需的行为。 您可以通过在~/.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 ,查看附加到bug报告的差异,以了解需要更改的行。

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

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

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

它是一个终端模拟器,你进入一个环境,在那里每个文件访问都经过auto-aptvalidation,如果它不存在,它在数据库中搜索(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

自动安装将是一个坏主意。 如果你想保存一些打字,你可以使用

 sudo apt-get install !! 

哪里!! 将被历史记录中的最后一个命令替换。 您可能也可以将其设为别名,但我不知道如何添加!! 没有评估它。

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

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

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

    这是“最酷”的方式,虽然显然不那么安全,但可能有90%的时间会引起内部的“谢谢,这正是我想让你做的!” 响应。

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

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

    在实践中,我倾向于发现这个足够快,并且稍微难以“意外地”进行,并且不需要任何先前的设置,我倾向于这样做。

  • 但是有一些东西可以说 – 如果你可以(或者想学习)快速输入 – 直接输入sudo apt install packagename

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