![使用别名命令的输出作为文件名在 vi 中打开](https://linux22.com/image/1079327/%E4%BD%BF%E7%94%A8%E5%88%AB%E5%90%8D%E5%91%BD%E4%BB%A4%E7%9A%84%E8%BE%93%E5%87%BA%E4%BD%9C%E4%B8%BA%E6%96%87%E4%BB%B6%E5%90%8D%E5%9C%A8%20vi%20%E4%B8%AD%E6%89%93%E5%BC%80.png)
今天早上我设置了一个别名,以帮助查找目录中的最新日志文件。我的别名如下
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 之前需要一个额外的功能。