Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

in zsh, how do I do a conditional on the exit status of a program?

Tags:

git

zsh

exit

status

I want to do something like:

if [[ git status &> /dev/null ]]; then
   echo "is a git repo";
else
   echo "is not a git repo";
fi

except I don't know how to check the exit status. How do I fix this?

like image 656
anon Avatar asked Feb 01 '10 21:02

anon


People also ask

Which variable gives the exit status of the last command executed in the shell?

Exit status 0 It tells you that your latest command or script executed successfully.

What does the exit status of a program indicate in Unix?

Every Linux or Unix command executed by the shell script or user has an exit status. Exit status is an integer number. 0 exit status means the command was successful without any errors. A non-zero (1-255 values) exit status means command was a failure.


3 Answers

The variable $? contains the last commands return code

EDIT: precise example:

git status &> /dev/null
if [ $? -eq 0 ]; then
  echo "git status exited successfully"
else
  echo "git status exited with error code"
fi
like image 58
orip Avatar answered Oct 23 '22 09:10

orip


Simply like that

if git status &> /dev/null
then
   echo "is a git repo";
else
   echo "is not a git repo";
fi

Or in a more compact form:

git status &> /dev/null && echo "is a git repo" || echo "is not a git repo"
like image 21
gregseth Avatar answered Oct 23 '22 10:10

gregseth


Another form that I often use is the following:

git status &> /dev/null
if (( $? )) then
    desired behavior for nonzero exit status
else
    desired behavior for zero exit status
fi

This is slightly more compact than the accepted answer, but it does not require you to put the command on the same line as in gregseth's answer (which is sometimes what you want, but sometimes becomes too hard to read).

The double parentheses are for mathematical expressions in zsh. (For example, see here.)

Edit: Note that the (( expression )) syntax follows the usual convention of most programming languages, which is that nonzero expressions evaluate as true and zero evaluates as false. The other alternatives ([ expression ], [[ expression ]], if expression, test expression, etc.) follow the usual shell convention, which is that 0 (no error) evaluates as true and nonzero values (errors) evaluate as false. Therefore, if you use this answer, you need to switch the if and else clauses from other answers.

like image 1
sasquires Avatar answered Oct 23 '22 09:10

sasquires