我一直在四处寻找,但到目前为止我还没有找到任何答案。我Bash / Zsh,我知道
的变体echo !!
echo !$
等等。但有没有办法回忆起最后一条输出线?我知道我可以简单地编辑该行并添加一些管道信息,但我想知道是否有替代品。为了说明,我可能想要执行以下操作
ls -tr
vim {whatever key to recall the last line}
这将允许我编辑最新的文件。
如果已经提出了类似的问题并且我无法找到它,您能否请我重定向到它?
答案 0 :(得分:4)
我觉得你运气不好。 shell可能必须存储大量信息(想象一个长时间运行的进程及其输出)。
对于你的例子:
ls -tr
vim {whatever key to recall the last line}
或许可接受的替代方案是使用子shell:
ls -tr
vim $(!!)
在子shell中重新执行最后一个命令,输出用作vim
的参数。
答案 1 :(得分:2)
好的,有一种方法可以实现你的目标。这只是一个概念验证,我不建议这样做:
> script --flush /tmp/myscript
Script started, file is /tmp/myscript
> LASTLINE() {
tail -2 /tmp/myscript | head -1 | tr -d '\r'
}
> bind '"^[[15~":"$(LASTLINE)\n"'
> ls -tr1
file1
file2
fileN
> vi [press F5]
这个想法:使用script
作为记住输入和输出的工具。在该示例中,它将所有数据存储在文件“/ tmp / myscript”中,而这些数据又可以被读取以获取最后的结果行。
由于实际命令(vi ...
)是“myscript”中的最后一行,我们读取该文件的最后两行并使用它们中的第一行。 (另外,我必须通过tr
过滤返回字符。)现在我们将此命令LASTLINE
绑定到F5(查看In bash, how do I bind a function key to a command?以详细了解如何将命令绑定到键)。
从现在开始,您可以按F5获取最后一行输出的内容。
如果您这样做,请记住您位于子shell(因为script
)内,可以通过exit
将其保留回原始shell。
小心:这或多或少与bash一起玩。有竞争条件和其他缺点,所以 我建议不要在敏感环境中使用此解决方案。