![Zsh:自动修改执行的命令](https://linux22.com/image/24969/Zsh%EF%BC%9A%E8%87%AA%E5%8A%A8%E4%BF%AE%E6%94%B9%E6%89%A7%E8%A1%8C%E7%9A%84%E5%91%BD%E4%BB%A4.png)
我最近通过 MacPorts 在我的系统中安装了 grc(通用着色器),使我能够为默认情况下不支持它的大量命令获取彩色输出(请参见下面的屏幕截图)。
我想让 grc 自动使用,但不是针对特定命令,而是针对每个命令。我使用 zsh 作为我的 shell。
本质上,每当我执行时,command -parameter 1 2 3
我都希望它自动执行为grc command -parameter 1 2 3
.
我不想使用别名,例如traceroute
alias to grc traceroute
,因为我正在添加越来越多的命令让 grc 着色。
我已经研究了 .zshrc 的 preexec 和 precmd 配置,但我还没有找到实现我正在寻找的东西的方法。
答案1
您可以通过重新定义接受行小部件来做到这一点:
add-grc() { [[ $BUFFER = grc* ]] || BUFFER="grc $BUFFER"; zle .$WIDGET "$@"; }
zle -N accept-line add-grc
但是,它可能会导致“for i (..)”、“var=x”、“f() {”...等命令出现问题。
答案2
其他替代方案。同类潜在问题:
TRAPDEBUG() { eval "grc $ZSH_DEBUG_CMD"; setopt errexit; }
我会为每个需要“grc”的命令使用“别名”,而不是试图找出此处发布的解决方案的例外情况。