在 bash 中我可以这样做:
#!/bin/bash
validate() {
if [[ "$BASH_COMMAND" == whoami ]]; then
return 1
else
return 0
fi
}
set -T
trap 'validate' DEBUG
shopt -s extdebug
这样如果我运行whoami
什么也不会发生。
我怎样才能在 zsh 中实现相同的目标?我看过了preexec
,但在其中找不到太多信息文档
答案1
您还可以使用DEBUG
陷阱在 zsh 中跳过命令,但指示跳过的机制不同:您需要设置err_exit
选项。
function validate {
if [[ "$ZSH_DEBUG_CMD" == whoami ]]; then
setopt err_exit
fi
}
trap 'validate' DEBUG