将最后一行错误消息作为命令运行

将最后一行错误消息作为命令运行

如果您尝试运行未安装的软件包,例如:

me ~: gparted 

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

如何sudo apt-get install gparted以命令形式运行该行?显然不是打字。

答案1

您可以通过将其添加到您的.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

给你:

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

如果您收到如下 python 错误:

...
  File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 217, in install_prompt
    answer = answer.decode(sys.stdin.encoding)
AttributeError: 'str' object has no attribute 'decode'

你可以:

申请这个补丁对于 Ubuntu 从这里
或者:通过在行首添加四个空格
进行修改215,216,217CommandNotFound.py(笔记:不是标签):

    ...
    213 其他:
    第214章
    第2154 spaces
    第2164 spaces
    第2174 spaces
    第218章
    ...

另一种方式,扩展格雷格·休吉尔的评论可能是:

$(!! 2>&1 | tail -n1)

我尝试将其封装在脚本中,但这不起作用盒子外面因为您不会收到错误消息。

如果想将其放入脚本中,一种相当hacky的方法可能是:

x=$(/usr/lib/command-not-found $(tail -n1 "$HOME/.bash_history") 2>&1 | tail -n1)
echo "$x"

对于某些选项,请查看:

/usr/lib/command-not-found -help

和/或检查脚本本身。

答案2

据我所知,没有办法解决这个问题。您有 2 个选择:

  1. 输入它
  2. 复制并粘贴它(从技术上讲,这是打字)

自动安装

作为第三种方法,您可以使用该工具auto-apt

   $ auto-apt run <command_string>

调用时,auto-apt 命令会在缺少文件访问时自动安装软件包。如果程序尝试访问已知属于已卸载软件包的文件,auto-apt 将使用 apt-get 安装该软件包。此功能需要 apt 和 sudo 才能工作。

但这种方法再次未能满足您的“无打字”要求。

其他想法

我相信提供安装建议的工具gparted是使用名为“完成”的工具绑定到 shell 中的。您可以扩展一些规则,以便在匹配这些规则时发生各种活动。

人们可能会扩展这些规则,或者可能扩展 1 个规则,以便apt-get -y install <package X>自动运行。

相关内容