使用别名命令的输出作为文件名在 vi 中打开

使用别名命令的输出作为文件名在 vi 中打开

今天早上我设置了一个别名,以帮助查找目录中的最新日志文件。我的别名如下

alias latest="ls -lat | grep ^- | awk '{print \$8}' | head -1"

在今天早上的研究中,我读到了一篇博客 - ParsingLS这告诉我这可能不是最好的方法 - 现在我们先忽略它,我可以find稍后再考虑使用更好的别名。现在假设我有一个完美运行的命令,预期会从当前目录输出文件名。

我以为我可以这样做latest | vi,打开目录中最新修改的文​​件,但这似乎行不通——vi 抱怨输出不是终端。我看到一个 stackoverflow 问题,其中暗示该问题与子 shell 和管道有关,所以我尝试了

latest | vi < `tty` > `tty`

但这让我

`tty`:ambiguous redirect

我确信这里有一些关于管道的基本知识我没有了解——我最近才开始认真尝试使用它们,有什么想法吗?

答案1

很简单。如果latest在 上生成一个文件名stdout$()则答案是:

vim $( latest )

man bash

答案2

我认为寻呼机还不够用?

我认为 vi 不支持这个(至少 nvi 或最近的 FreeBSD vi 不支持),但是 vim 可以:

latest | vim -

一种解决方法是使用命名管道:

mkfifo vi.fifo
latest > vi.fifo & vi vi.fifo
rm vi.fifo

不太漂亮,并且 FreeBSD vi 似乎:e在读取 fifo 之前需要一个额外的功能。

相关内容