我经常发现自己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
第一个clear
和date
命令是您的解决方案的一部分。之后,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]\""
会导致请求的输出。