阻止命令在 zsh 中运行

Foo*_*Foo 3 bash zsh

在 bash 中我可以这样做:

#!/bin/bash
validate() {
    if [[ "$BASH_COMMAND" == whoami ]]; then
        return 1
    else
        return 0
    fi
}
set -T
trap 'validate' DEBUG
shopt -s extdebug
Run Code Online (Sandbox Code Playgroud)

这样如果我运行whoami什么也不会发生。

我怎样才能在 zsh 中实现相同的目标?我看过但在文档preexec中找不到太多信息

Gil*_*il' 5

您还可以使用DEBUGtrap来跳过 zsh 中的命令,但指示跳过的机制不同:您需要设置err_exit选项

function validate {
    if [[ "$ZSH_DEBUG_CMD" == whoami ]]; then
        setopt err_exit
    fi
}
trap 'validate' DEBUG
Run Code Online (Sandbox Code Playgroud)