在我的.bashrc..。
46 function exitstatus()
47 {
48 local a=0
49 local s=$1
50 s=$s+1
51 a=$a+1
52 echo -n ' arg1='$s' a='$a
53 s=$1
54 a=0
55 echo ' arg1='$s' a='$a
56
57 if [[ "$s" = "$a" ]]; then
58 echo "true"
59 else
60 echo "false"
61 fi
62 }
63
64 function myprompt {
65 local ss=\$?
66 unset PS1
67 PS1="exit:\$? var:$ss exitstatus $ss $(exitstatus $ss) \n\t $ "
68 }
69 mypromptexitstatus的计算结果始终为false,即使变量s和a看起来是同一个字符串:
23:36:55 $ true
exit:0 var:0 exitstatus 0 arg1=0+1 a=0+1 arg1=0 a=0
false
23:36:56 $ false
exit:1 var:1 exitstatus 1 arg1=1+1 a=0+1 arg1=1 a=0
false第50行和第52行向我演示了s被视为字符串,因此我将其作为第57行的字符串进行比较。如果我将s与自身或a与自身进行比较,则比较结果与预期一致,因为exitstatus的计算结果始终为true。由于某些原因,exit status $?作为exitstatus的参数并没有像我预期的那样被处理。
我遗漏了什么?
发布于 2021-07-15 03:52:08
这就是最终奏效的方法。我去掉了提示符,使用exitstatus更改了提示符的颜色:
function exitstatus { if [[ $? != 0 ]]; then echo -e "\e[48;5;52m"; fi; }
unset PS1 PS2 PS4
PS1='$(exitstatus) $'https://stackoverflow.com/questions/61495060
复制相似问题