相同.zshrc在Arch启动时异常、source后恢复的问题排查求助
相同.zshrc在Arch启动时异常、source后恢复的问题排查求助
问题简述
- 同一
.zshrc配置文件在Ubuntu和Arch系统上共用 - Arch下启动终端后,大部分配置正常生效,但小部分配置失效
- 新终端会话启动时,提示符
PS1="%(?.▶.✘)"显示✘,但执行echo $?输出0 - 手动执行
source ~/.zshrc后,所有配置立即恢复正常
详细情况
我现在碰到一个特别诡异的问题,完全摸不清头绪,只能把所有细节列出来求助:
我在Ubuntu和Arch两台机器上用的是完全一模一样的.zshrc配置。在Ubuntu上启动终端加载zsh后一切都正常,但在Arch上启动时却出了问题——不过不是彻底失效:大部分别名、函数和shell选项都能正常工作,但有一部分就是不行。更奇怪的是,只要手动执行source ~/.zshrc,所有配置就立刻恢复正常,只有刚启动终端的初始阶段会出问题。
还有个更费解的矛盾点:我在提示符里配置了这段逻辑:
PS1="%(?.%(!.%{$fg[yellow]%}▶.%{$fg[cyan]%}▶).%{$fg[red]%}✘)"
简单解释下:如果上一条命令执行失败(退出码非0),提示符就显示红色的✘;如果成功就显示对应颜色的▶。但Arch上刚打开终端时,提示符直接显示✘,说明有命令执行失败了,但我从头到尾没看到任何错误提示。
更奇怪的是,此时我执行echo $?,输出的是0——这明明代表上一条命令执行成功了啊!为什么提示符能检测到错误状态,$?却显示正常?
我完全不知道该怎么调试这种问题,要是有人能给点排查思路真的太感谢了。这事儿不算大问题,但实在闹心,而且从学习角度来说,这种异常情况也很值得搞清楚根源。
(我的.zshrc有400多行,我觉得本身没有语法错误,毕竟source之后就完全正常了,如果大家觉得有必要看完整配置,我再补充上来)
备注:内容来源于stack exchange,提问作者Bog
相关产品推荐
相关产品推荐

