shell退出状态码学习整理

之前在折腾shell提示符的样式时,发现提示符最后有时会出现”C:127“,C后面的数字不唯一,会有变化。

018-03-26shell退出状态码学习整

对于不知道的,就搜索引擎搜索。做了以下尝试,”zsh ys C是什么意思“,”C:127“,”ys“,搜不到解释。

后来想,这里出现”C:127“是因为我设置了oh-my-zsh主题ys的原因,那我能不能找找ys的文档,来看看这个东西到底叫什么,是用来做什么的?

在这里https://gist.github.com/ysmood/6110461找到ys的源代码,line42处

1
# PRIVILEGES USER @ MACHINE in DIRECTORY on git:BRANCH STATE [TIME] C:LAST_EXIT_CODE

指出了”C“的含义是last_exit_code,翻译是”最后退出的代码“,然后再搜索,发现这个术语叫退出码。

linux在执行完一条命令后,使用 echo $? 会显示上一条命令是否执行成功

找到一篇博客介绍它,然后参考资料是《Linux命令行与shell脚本编程大全》,刚好我电脑里有这本书,就翻出来看看。

shell中运行的每个命令都是用退出状态码(exit status)告诉shell它已经运行完毕。退出状态码是一个0~255的整数值,在命令结束时由命令传给shell。可以捕获这个值并在脚本中使用。

Linux提供了一个专门的变量 $? 来保存上个已执行命令的退出状态码。对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用$?变量。它的值会变成由shell所执行的最后一条命令 的退出状态码。

一个成功结束的退出状态码是0。如果一个命令结束时有错误,退出状态码就是一个正数值。

退出码的值 含义 例子 注释
1 通用错误 let “var1 = 1/0” 各种各样的错误都可能使用这个退出码, 比如”除0错误”
2 shell内建命令使用错误 很少看到, 通常情况下退出码都为1
126 命令调用不能执行 程序或命令的权限是不可执行的
127 ”command not found“ 估计是$PATH不对, 或者是拼写错误
128 exit的参数错误 exit 3.14159 exit只能以整数作为参数, 范围是0 - 255(见脚注)
128+n 信号”n”的致命错误 kill -9 脚本的$PPID $? 返回137(128 + 9)
130 用Control-C来结束脚本 Control-C是信号2的致命错误, (130 = 128 + 2, 见上边)
255* 超出范围的退出状态 exit -1 exit命令只能够接受范围是0 - 255的整数作为参数

退出状态码的最大只能是255。若其大于255,则返回模除256后的余数。

所有ys主题提示符里的C就是上一条命令的执行状态,帮我们省略了echo $?的命令。

参考资料

《Linux命令行与shell脚本编程大全》