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

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


The variable $? contains the last commands return code

EDIT: precise example:

git status &> /dev/nullif [ $? -eq 0 ]; then  echo "git status exited successfully"else  echo "git status exited with error code"fi


Simply like that

if git status &> /dev/nullthen   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"


Another form that I often use is the following:

git status &> /dev/nullif (( $? )) then    desired behavior for nonzero exit statuselse    desired behavior for zero exit statusfi

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.