如何在Bash中测试命令的非零退出状态?

时间:2013-07-03 19:36:29

标签: bash shell if-statement exit-code

我有一个脚本可以检查以下函数的退出状态:

function is_git_repository {                                                    
    git branch &> /dev/null                                                     
}  

如果您使用的是git仓库,则返回0;如果不是,则返回128

我测试返回值是否为0没有问题;以下按预期工作:

if is_git_repository ; then 
    echo you are in a git repo
else 
    echo you are NOT in a git repo
fi

但是,当我遇到问题时,我正在尝试测试退出状态,而不是0。我尝试了以下方法,但没有一个有效:

  1. if [[ "$(is_git_repository)" != "0" ]] ; ...始终评估为true(link
  2. if [[ "$(is_git_repository)" -ne "0" ]] ; ...始终评估为false
  3. if [[ "$(is_git_repository)" != 0 ]] ; ...始终评估为真
  4. if [[ "$(is_git_repository)" -ne 0 ]] ; ...始终评估为false
  5. if [[ ! "$(is_git_repository)" ]] ; ...始终评估为真
  6. if !is_git_repository ; ...只是将命令回复给我,但没有爆炸(wtf?)
  7. 在if语句中检查命令的非零退出状态的正确方法是什么?

2 个答案:

答案 0 :(得分:7)

我很快发现if ! is_git_repository ; then ...按预期工作(在Introduction to if中查看 7.1.2.1。测试退出状态),但为什么?我本以为#1至少会起作用,但我不知道它为什么没有。

另外,#6是什么?!

答案 1 :(得分:1)

考虑布尔快捷方式而不是if语句:

is_git_repository || echo you are NOT in a git repo