在随后的bash提示符中包含非0退出代码

Sor*_*ren 16 bash command-prompt

偶尔,我会运行一个输出很多的命令.偶尔,最后30-40行是输出的(又名输出我所真正看到的只有一部分)是好的,但要进一步上涨,出现了错误.我想更容易注意到命令失败了.为此,我希望返回代码成为我的提示的一部分.所以我拿了我的$ PS1:

[\D{%Y-%m-%d} \t] \[\e]0;\u@\h: \w\a\]\$
Run Code Online (Sandbox Code Playgroud)

......并将其扩展到:

[\D{%Y-%m-%d} \t] ${?/^0$/} \[\e]0;\u@\h: \w\a\]\$
Run Code Online (Sandbox Code Playgroud)

这会产生如下提示:

[2011-05-10 09:38:07] 0 soren@lenny:~$ 
Run Code Online (Sandbox Code Playgroud)

但是,我想找到一种方法让它只包含退出代码,如果它不是0.我怎样才能做到这一点?当然,我可以使用

$(echo \$? | sed -e blah)
Run Code Online (Sandbox Code Playgroud)

但是像sed一样轻巧,它仍然比bash内置的东西重得多.

Ign*_*ams 12

一点点printf虐待:

printf '%.*s' $? $?
Run Code Online (Sandbox Code Playgroud)

  • 这两个都有效,让我笑了起来.我喜欢.我稍微扩展到这个:`printf'%.*s%.*s'$?$?$?''`这使它只有在非零时才添加空格. (2认同)

小智 8

以下适用于我:

PS1="[\D{%Y-%m-%d} \t] \u@\h:\w\a \${?##0} \$ "

$的例子?是0:

[2011-07-25 11:56:57] plars@plars-t500:~  $<br>
there is an extra space there ---------^^ not sure if that's a problem for you
Run Code Online (Sandbox Code Playgroud)

$的例子?是130:

[2011-07-25 11:57:39] plars@plars-t500:~ 130 $
Run Code Online (Sandbox Code Playgroud)


übe*_*sus 6

你可以使用bash的内置模式匹配:

$ rc=0
$ echo ${rc##0}

$ rc=123
$ echo ${rc##0}
123
Run Code Online (Sandbox Code Playgroud)