linux zsh 为 clear 伪造别名,打印已执行的命令行

linux zsh 为 clear 伪造别名,打印已执行的命令行

我经常发现自己clear;在一个期望产生大量输出的命令前面放置了一个。

我经常错过的是可以在顶部看到已执行的命令行。我能做些什么魔法来解决这个问题吗?

例子:

如果我输入clear;some_program with params我希望有一个清除的终端显示类似以下内容:

Fri 12 Apr 2024 12:32:00 PM CEST 
> clear;some_program with params
// program output //

第一部分很简单,只需定义一个别名,alias clear="clear;date" 有没有打印整个命令行的解决方案?(不管清除是否是其中的一部分,或者是否有换行)

答案1

您可以尝试通过命令启用调试模式set。以下是执行相同操作的演示。

clear; date; set -x; echo "Hello"; set +x

第一个cleardate命令是您的解决方案的一部分。之后,set -x将打印正在作为调试的一部分执行的命令。将其替换echo "Hello"为您想要的命令或脚本。最后,set +x将禁用调试模式。

笔记:如果您使用 进行了一些自定义zsh,则在调试模式下会得到很多不必要的输出。例如,我使用 Oh My Zsh,在调试模式下我得到了所有 oh my zsh 命令。

如果您没有任何自定义,该解决方案应该可以正常工作。如果您有某种自定义,您可以在 中运行上述解决方案zsh -f。它将加载zsh而无需任何配置(.zshrc .zshenv 和其他)。如果您的脚本或命令不依赖于这些文件,您可以使用此修复程序。

答案2

我能够使用 zsh 的历史变量来实现它。该变量$history[$HISTCMD]包含最后执行的命令行,在这种情况下始终是刚刚执行的命令行。

因此定义这样的别名: alias clear="clear;date;echo \> \"\$history[\$HISTCMD]\"" 会导致请求的输出。

相关内容