2010-07-08 3 views
4

Я хотел бы иметь команду выполнить только если статус выхода предыдущей команды не был 0.Как выполнить логическое ИЛИ в Баш

т.е. Команда 1^Команда 2 где команда 2 выполняется только при Команда 1 не работает.

+3

Вы знаете, что невозможно сделать эксклюзивное или короткое замыкание вправо (поскольку независимо от значения левого операнда результат всегда будет зависеть от правильного операнда)? То, что вы описываете, является обычным или. – sepp2k

ответ

7

Для этого используйте двухтрубный (||).

touch /asdf/fdasfds/fdasfdas || echo "Couldn't touch." 

Вторая команда выполняется только тогда, когда первая команда возвращает ненулевое значение, точно так же, как вы указали.

+1

Я не знаю, почему я этого не видел. Тупой надзор с моей стороны. Благодаря! – royvandewater

1

Это должно работать:

command1 || command2 
3

Я думаю, что следует отметить, что, что OR не имеет такое же значение, как 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 
+0

Можете ли вы действительно использовать '!' Для обозначения NOT в коде bash? –

Смежные вопросы