Стандартный способ сделать это - использовать двоеточие :
:
if condition; do
command
else
:
fi
или true
:
if condition; do
command
else
true
fi
Но почему бы просто не пропустить часть else
:
if condition; do
command
fi
В zsh
и yash
вы даже можете сделать else
часть пуста:
if condition; then
command
else
fi
Как уже говорилось if [ $(tmux has -t junk) ]
расширяется до if [ ]
, что оценивается как false.
Вы можете использовать:
if tmux has -t junk; then
echo OK
else
echo ERR
fi
Или, если хотите короче:
tmux has -t junk || echo ERR
Или
tmux has -t junk && echo OK || echo ERR
Вы также можете отрицать его, если это более подходит, как в:
! tmux has -t junk || echo OK
! tmux has -t junk && echo ERR || echo OK
etc.
Edit:
Также не стоит забывать, что если команда производит вывод, то вы можете захотеть перенаправить этот вывод в
вывод в черную дыру /dev/null
, как в:
if my_cmd >/dev/null; then echo OK else; echo ERR; fi
Если команда выдает текстовую ошибку, вы, возможно, захотите перенаправить стандартную ошибку также:
if my_cmd >/dev/null 2>&1; then echo OK else; echo ERR; fi
Это, что следует далее, вы, возможно, уже хорошо знаете, но добавим это для большей полноты.
Как уже упоминалось: $?
- это единственный способ получить возвращаемое значение программы.
Некоторые программы варьируют return и могут иметь довольно явное значение.
Например, так:
mycmd
ecode=$?
case "$ecode" in
0) echo "Success";;
1) echo "Operation not permitted";;
2) echo "No such file or directory";;
esac
С помощью этого можно предпринять соответствующие действия при конкретных ошибках.
Если у вас установлен MySQL, вы можете сделать это, например, с помощью perror:
for i in {0..50}; do perror $i; done
# And
for i in {1000..1050}; do perror $i; done
чтобы получить представление об этом.
См. также этот ответ, связанный с ошибками, специфичными для ОС, который также содержит ссылки на документы Open Groups doc Error Numbers и errno.h.
Или посмотрите на SQLite и его расширенные.
Когда вы используете:
if [ $(tmux has -t junk) ]
Это проверяет вывод команды tmux имеет -t junk
, но не возвращаемое значение.
Так как она всегда печатает единицу, как в первом случае, это означает, что команда tmux has -t junk
ничего не печатает на стандартный вывод.
Поэтому в первом случае
if [ $(tmux has -t junk) ]
вычисляется как
if [ ]