Для команд оболочки статус выхода 0 означает истина/успешно, а все остальное означает ложь/неудача (при этом точное значение используется для различения различных типов ошибок). Лучше всего в первую очередь избегать использования точных значений состояния выхода и вместо этого использовать команды false
или true
:
__isred() {
if [[ $(ps cax | grep redshift | wc -l) > 0 ]]
then
true
else
false
fi
}
В этот момент вы начинаете понимать, что это немного глупо, как вы можете просто сделать:
__isred() [[ $(ps cax | grep redshift | wc -l) > 0 ]]
Обратите внимание, что [[ > ]]
используется для лексического сравнения. Было бы разумнее использовать здесь численное сравнение:
__isred() (( $(ps cax | grep redshift | wc -l) > 0 ))
Но на самом деле нет необходимости подсчитывать количество вхождений, если вы просто хотите проверить, было ли хотя бы одно:
__isred() { ps cax | grep -q redshift; }
Должно быть достаточно. grep
вернет успех, если регулярное выражение совпадает.
Теперь, когда вы используете нестандартный синтаксис ps
, вы можете вместо этого использовать немного более переносимую команду pgrep
, чтобы сделать это ps
. ]+grep
проще и надежнее:
__isred() { pgrep redshift > /dev/null; }