![将最后一行错误消息作为命令运行](https://linux22.com/image/3768/%E5%B0%86%E6%9C%80%E5%90%8E%E4%B8%80%E8%A1%8C%E9%94%99%E8%AF%AF%E6%B6%88%E6%81%AF%E4%BD%9C%E4%B8%BA%E5%91%BD%E4%BB%A4%E8%BF%90%E8%A1%8C.png)
如果您尝试运行未安装的软件包,例如:
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 个选择:
- 输入它
- 复制并粘贴它(从技术上讲,这是打字)
自动安装
作为第三种方法,您可以使用该工具auto-apt
。
$ auto-apt run <command_string>
调用时,auto-apt 命令会在缺少文件访问时自动安装软件包。如果程序尝试访问已知属于已卸载软件包的文件,auto-apt 将使用 apt-get 安装该软件包。此功能需要 apt 和 sudo 才能工作。
但这种方法再次未能满足您的“无打字”要求。
其他想法
我相信提供安装建议的工具gparted
是使用名为“完成”的工具绑定到 shell 中的。您可以扩展一些规则,以便在匹配这些规则时发生各种活动。
人们可能会扩展这些规则,或者可能扩展 1 个规则,以便apt-get -y install <package X>
自动运行。