命令行中的bash / zsh输出行

时间:2014-02-21 12:46:16

标签: bash zsh shortcuts

我一直在四处寻找,但到目前为止我还没有找到任何答案。我Bash / Zsh,我知道

的变体
echo !! 
echo !$

等等。但有没有办法回忆起最后一条输出线?我知道我可以简单地编辑该行并添加一些管道信息,但我想知道是否有替代品。为了说明,我可能想要执行以下操作

ls -tr
vim {whatever key to recall the last line}

这将允许我编辑最新的文件。

如果已经提出了类似的问题并且我无法找到它,您能否请我重定向到它?

2 个答案:

答案 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一起玩。有竞争条件和其他缺点,所以  我建议不要在敏感环境中使用此解决方案。