您可能遇到过未安装包的情况,并且系统建议您使用 进行安装apt-get install mypackage
。
我正在寻找一个快捷键来执行最后一行。显然向上箭头不会带来它,因为它不是你执行的命令,而只是上一个执行的程序的最后一行输出。
关于如何在 bash 中实现这种行为有什么想法吗?
答案1
你可以创建一个别名xo
(随便取一个),重播最后一个命令而不打印任何输出,然后将该输出的最后一行作为命令运行。
alias xo='$($(fc -ln -1) |& tail -1)'
然后,在您尝试运行并被告知可以用来安装的myapp
命令后,您只需键入并按下,安装命令就会运行。mypackage
myapp
xo
Entermypackage
工作原理
$(fc -ln -1)
行为很像历史扩展!!
。!!
在别名或函数定义中不起作用,但fc
(和用 进行命令替换$(
)
)可以起作用。
$(fc -ln -1) |& tail -1
重新运行最后一个命令,并将其标准输出通过管道传输出去和标准错误tail -1
,丢弃除最后一行之外的所有内容。
将其包含在外部命令替换中会导致最后一行作为命令运行。对其执行分词(因为整个内容是不是用引号括起来"
),这就是您想要的。
引用来源
- 希梅尔的回答到如何执行 bash 中的最后一行输出?在询问 Ubuntu,介绍了
$(!! |& tail -1)
该可别名方法所基于的核心技术。 - 戈登·戴维森的回答到创建包含 bash 历史扩展的别名,展示如何在别名定义内部工作时
$(fc -ln -1)
进行模拟。!!
- 我的答案到询问 Ubuntu 问题,我最初在其中提出了这个解决方案(与我在这回答)。
答案2
可能的解决方案$(!! |& tail -1)
正如本主题所述:https://askubuntu.com/questions/621681/how-can-i-execute-the-last-line-of-output-in-bash/621684