命令行中的bash/zsh输出行

命令行中的bash/zsh输出行,bash,zsh,shortcuts,Bash,Zsh,Shortcuts,我一直在四处寻找,但到目前为止还没有找到任何答案。我Bash/Zsh,我知道 echo !! echo !$ 等等。但是有没有办法回忆最后一行输出?我知道我可以简单地编辑管线并添加一些管道信息,但我想知道是否有替代方案。为了举例说明,我可能想做以下几点 ls -tr vim {whatever key to recall the last line} 这将允许我编辑最新的文件 如果已经有人问了一个类似的问题,但我找不到,你能帮我转到它吗?我想你运气不好。shell可能需要存储大量信息(想象

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

echo !! 
echo !$
等等。但是有没有办法回忆最后一行输出?我知道我可以简单地编辑管线并添加一些管道信息,但我想知道是否有替代方案。为了举例说明,我可能想做以下几点

ls -tr
vim {whatever key to recall the last line}
这将允许我编辑最新的文件


如果已经有人问了一个类似的问题,但我找不到,你能帮我转到它吗?

我想你运气不好。shell可能需要存储大量信息(想象一个长时间运行的进程及其输出)

例如:

ls -tr
vim {whatever key to recall the last line}
也许可以接受的替代方案是使用子shell,因此:

ls -tr
vim $(!!)

它重新执行子shell中的最后一个命令,并将输出用作
vim

的参数。好的,有一种方法可以实现您的目标。这只是一个概念证明,我不建议这样做:

> 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(请参阅以详细了解如何将命令绑定到键)。 从现在开始,您可以按F5键获取最后一行输出的内容

如果您这样做,请记住您位于子shell中(因为
脚本
),可以通过
退出退出退出子shell以返回到原始shell

小心:这或多或少是在玩bash。有比赛条件和其他退步,所以
我建议不要在敏感环境中使用此解决方案。

不,shell不跟踪任何命令的输出,这不是它的工作。另外,这可能是离题了。谢谢你的回答。我已经看到一些“相似”的问题,所以我认为这是可以的。但是可能是错误的…如果使用
tmux
,您可能能够编写脚本以复制其输出缓冲区的最后一行。这将不是一件简单的事情,而且我现在所能做的工作比我现在所能做的还要多。希望这条评论能激励某人(或我未来的自己)调查细节并给出答案。谢谢你的回答。这可能是一个选项,的确如此。re—“可能外壳必须存储大量的信息”,不管怎样,大量的信息已经存储了—这是可见的回滚缓冲区。但这不在shell的范围内,而是在终端中。可见的回滚缓冲区通常是有限的,不是吗?