当前目录中最后一个文件的全局别名

3
我经常希望在当前目录中对最近的文件执行某个功能。本质上,我想要一个更通用的方法来使用vi打开最近修改的文件
我可以在zsh中编写全局别名,完成我需要的部分:
alias -g lafi='`ls -rt|tail -n 1`'

现在我可以执行类似这样的东西。
cat lafi

我将看到当前目录中最近文件的内容。或者我可以输入echo lafi来找出最后一个文件是什么(甚至可以说ls -rt|tail -n 1)。
是否有一种方法可以修改别名定义,使其输出最后一个文件(到STDERR?),然后像上面的lafi一样传递下去以便在命令行中进一步使用?因此,对于上面的cat lafi,我希望得到这个输出。
last file: <name of last-file>
<content of last-file>

我怀疑这涉及到 tee,但我的shell技能不足以详细解释。


1
zsh 允许使用更高效的命令 print *(.Om[-1]) 替换管道。这也更安全,因为它避免了解析带有换行符的文件名的 ls 输出的问题。 - chepner
你能把这个转化成一个答案,然后我就可以接受它吗? - DrSAR
1
只需将其视为对Glenn答案的优化:alias -g lafi ='$(print *(.om [1])| tee ...)' - chepner
1个回答

3

或许

alias -g lafi='`ls -rt | tail -n 1 | tee >({ printf "last file: "; cat; } >&2)`'

我认为zsh有像这样的进程替代。

其中一个问题是,像 echo lafi 2>/dev/null 这样的命令将无法抑制“最后一个文件”注释,因为 tee 命令继承了其标准错误输出自 shell;本地重定向不适用。这只是根据使用情况需要注意的一点。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接