在 bash 中运行的每个命令都会返回一个退出代码。
每当我在 bash 提示符下键入命令时,我都希望它显示退出状态,即, echo $?
例如,如果我echo "hello";在 bash 提示符下运行,输出应该是:
linux@linux$ hello
linux@linux$ 0
Run Code Online (Sandbox Code Playgroud)
cha*_*aos 13
最后执行的命令的退出代码存储在$?环境变量中。因此,您只需将此变量添加到默认命令提示符即可,并且您将始终在那里打印退出代码。提示存储在$PS1环境变量中。它最初在/etc/bash.bashrc脚本中设置,后来在$HOME/.bashrc.
因此,从它的默认值编辑$HOME/.bashrc(/etc/bash.bashrc将是系统范围) 中的行:
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Run Code Online (Sandbox Code Playgroud)
对此(例如):
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w[$?] \$ '
Run Code Online (Sandbox Code Playgroud)
所以默认提示改为:
user@host:/path/to/dir[0] $
Run Code Online (Sandbox Code Playgroud)
括号中的 0 是您的退出代码,请参阅:
user@host:~[0] $ ls
user@host:~[0] $ ls /root/
ls: cannot open directory /root/: Permission denied
user@host:~[2] $ ^C
user@host:~[130] $
Run Code Online (Sandbox Code Playgroud)
含义见http://www.tldp.org/LDP/abs/html/exitcodes.html
我从Arch Wiki 中选择的另一种方法是使用trap:
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
Run Code Online (Sandbox Code Playgroud)
影响:
$ ( exit 1 )
code 1
$ some-non-existent-command
some-non-existent-command: command not found
code 127
$
Run Code Online (Sandbox Code Playgroud)