You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

zsh主题中传递%?给脚本失败,如何正确传递上次退出码?

Zsh主题中正确传递命令退出码给外部脚本的解决方法

方法一:利用precmd钩子保存真实退出码

zsh的precmd函数会在每次生成提示符之前执行,此时获取的$?就是上一条命令的真实退出码,不会被其他中间命令干扰。

在你的zsh主题文件或.zshrc中添加以下配置:

# 先加载hook模块(若主题未默认加载)
autoload -Uz add-zsh-hook

# 定义precmd钩子函数保存退出码
_save_exit_code() {
  LAST_EXIT_CODE=$?
}
add-zsh-hook precmd _save_exit_code

# 在PROMPT中使用保存的变量调用脚本
PROMPT='$(python "$ZSH/custom/plugins/exit-code.py" "$LAST_EXIT_CODE") 你的提示符内容'

方法二:强制展开%?提示符转义

zsh的命令替换($())里默认不会解析%?这类提示符转义符,需要用参数展开语法强制解析:

PROMPT='$(python "$ZSH/custom/plugins/exit-code.py" "${(%):-%?}") 你的提示符内容'

这里${(%):-%?}的作用是告诉zsh对%?进行提示符转义处理,将其替换为实际的退出码数字,而非字符串%?。

额外注意事项

  • 确保exit-code.py能正确处理整数参数,包括退出码为0(命令执行成功)的情况,避免出现类型转换报错。
  • 若使用Oh My Zsh,建议将配置放在自定义主题文件($ZSH/custom/themes/下的文件)中,防止被默认配置覆盖。

内容的提问来源于stack exchange,提问作者alexZeLoCO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:01:17