Я хотел бы иметь команду выполнить только если статус выхода предыдущей команды не был 0.Как выполнить логическое ИЛИ в Баш
т.е. Команда 1^Команда 2 где команда 2 выполняется только при Команда 1 не работает.
Я хотел бы иметь команду выполнить только если статус выхода предыдущей команды не был 0.Как выполнить логическое ИЛИ в Баш
т.е. Команда 1^Команда 2 где команда 2 выполняется только при Команда 1 не работает.
Для этого используйте двухтрубный (||
).
touch /asdf/fdasfds/fdasfdas || echo "Couldn't touch."
Вторая команда выполняется только тогда, когда первая команда возвращает ненулевое значение, точно так же, как вы указали.
Я не знаю, почему я этого не видел. Тупой надзор с моей стороны. Благодаря! – royvandewater
Это должно работать:
command1 || command2
Я думаю, что следует отметить, что, что 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
Можете ли вы действительно использовать '!' Для обозначения NOT в коде bash? –
Вы знаете, что невозможно сделать эксклюзивное или короткое замыкание вправо (поскольку независимо от значения левого операнда результат всегда будет зависеть от правильного операнда)? То, что вы описываете, является обычным или. – sepp2k