Hos*_*asr 1 bash prompt string shell-script
如果失败,我想在 shell 中打印上一个命令的退出代码。所以我像这样改变了PS1
变量/etc/bash.bashrc
:
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w [$?] \$ '
#_______________________________________________^^^^_____
Run Code Online (Sandbox Code Playgroud)
但它总是打印上一个命令的退出代码。有没有办法在模板中添加条件,这样如果$?
等于0
,它就不会打印$?
您可以在内部创建条件和表达式,$()
如下所示:
echo "$( var=2; echo $var)"
Run Code Online (Sandbox Code Playgroud)
PS1
在您的示例中,您可以像这样更改变量:
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w $(
status=$?; (( status != 0 )) && echo "[$status] "
)\$ '
Run Code Online (Sandbox Code Playgroud)
好像:
jackman@b7q9bw1:~ $ echo hello
hello
jackman@b7q9bw1:~ $ sh -c 'exit 42'
jackman@b7q9bw1:~ [42] $
Run Code Online (Sandbox Code Playgroud)