在bash提示符中捕获上一个命令的退出值

时间:2013-08-12 22:42:59

标签: bash command-prompt exit-code

如何在bash提示符中捕获上一个命令的退出值?我想这样做,因为我也希望在我的路径中包含当前的git分支,并且更改$?

我在以下提示上尝试了很多变体(例如,对RETVAL赋值的`,`和$()),但RETVAL在所有这些中都是空的:

PS1="\$(RETVAL=$(echo \$))\$(cd 124123)retval: $RETVAL"

cd命令里面只是一个占位符,用于调用git当前分支函数,之后我回显RETVAL(如果它被赋值,这总是一个空字符串来测试。

其他相似/相关的问题:

我也尝试使用这些页面上的示例在提示命令中设置RETVAL,但提示中没有显示任何内容

2 个答案:

答案 0 :(得分:3)

创建一个生成提示的函数,然后保存$?

makeprompt() { 
    status=$?
    echo "$(echo someoutput) $status"
    return $status
}

PS1='$(makeprompt) \$ '

这将为您提供命令的输出(此处为echo,但可能为git),以及先前执行的命令的退出状态。

答案 1 :(得分:0)

来自bash(1)

PROMPT_COMMAND
  If set, the value is executed as a command  
  prior  to  issuing  each  primary prompt.

使用它,而不是PS1。您的PS1分配在分配时会扩展一次,但不会在每次显示提示时展开。是的,当它完成时,会进行一些扩展,但它是有限的(并且使用样式替换"变量" - 再次,请参阅bash(1))。