Я бы хотел, чтобы команда выполнялась только в том случае, если предыдущее состояние команды не было 0.
т.е. Команда 1 ^ Команда 2 где команда 2 выполняется только в случае сбоя команды 1.
Для этого используйте оператор двойной трубы (||).
||
touch /asdf/fdasfds/fdasfdas || echo "Couldn't touch."
Вторая команда выполняется только тогда, когда первая команда возвращает ненулевое значение, точно как вы указали.
Я думаю, следует упомянуть, что это ИЛИ не имеет того же значения, что и XOR («исключающее или»). См. Таблицу истинности ниже.
"or" "xor" P Q (( $P || $Q )) (( ($P && ! $Q) || (! $P && $Q) )) 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 0
Это должно работать:
command1 || command2