自定义fish_prompt时嵌入if语句失效,求助解决方法
Fish Shell 自定义提示符:修复错误状态显示失效问题
你的问题出在$status变量的特性上:fish中每执行一个命令,$status都会被更新为该命令的退出码。在你的函数里,执行prompt_pwd和__fish_git_prompt之后,$status已经变成了这两个函数的退出状态(通常是0),不再是上一个用户命令的错误码,导致if判断永远不触发。
修正后的代码如下:
function fish_prompt # 提前保存上一个命令的退出状态,避免被后续命令覆盖 set last_status $status echo -n $USER echo -n "@" echo -n $hostname echo -n " " echo -n (prompt_pwd) echo -n (__fish_git_prompt) if [ $last_status -ne 0 ] echo -n " [$last_status] " end echo -n "> " end
核心改动:
- 在函数最开头用
set last_status $status把上一个命令的退出状态存入自定义变量,锁定原始错误码。 - 后续的条件判断和状态输出都使用
$last_status,而不是会被覆盖的$status。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

