Conforme mencionado, if [ $(tmux has -t junk) ]
expande para if [ ]
, que é avaliado como falso.
Você pode usar:
if tmux has -t junk; then
echo OK
else
echo ERR
fi
Ou se você quiser o mais curto:
tmux has -t junk || echo ERR
Ou
tmux has -t junk && echo OK || echo ERR
Você também pode negá-lo se isso for mais adequado, como em:
! tmux has -t junk || echo OK
! tmux has -t junk && echo ERR || echo OK
etc.
Editar:
Também não que, se um comando produz saída, você pode querer redirecionar
saída para o buraco negro de /dev/null
como em:
if my_cmd >/dev/null; then echo OK else; echo ERR; fi
Se o comando produzir erro textual, você poderá redirecionar o padrão erro também por:
if my_cmd >/dev/null 2>&1; then echo OK else; echo ERR; fi
Isso, o que segue, você já deve saber bem, mas adicione um pouco mais completude.
Como mencionado: $?
é a única maneira de obter o valor de retorno do programa.
Alguns programas variam de retorno e podem ter um significado bastante explícito.
Então, por exemplo:
mycmd
ecode=$?
case "$ecode" in
0) echo "Success";;
1) echo "Operation not permitted";;
2) echo "No such file or directory";;
esac
Por isso, pode tomar medidas adequadas sobre erros específicos.
Se você tem o MySQL instalado, você pode fazer, e. isso por perror :
for i in {0..50}; do perror $i; done
# And
for i in {1000..1050}; do perror $i; done
para ter uma ideia.
Veja também esta resposta relacionada a erros específicos do sistema operacional que também vincula ao documento Grupos Abertos Números de erros e errno.h .
Ou dê uma olhada em SQLite e seu estendidos .