今天早上我设置了一个别名,以帮助查找目录中的最新日志文件。我的别名如下
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 之前需要一个额外的功能。