Выполните две команды, если первая не сработает

Я пишу скрипт.sh как:

ls a || ls > /dev/null || echo "both command fails"; exit 3 echo 5 # not showed up 

Я надеюсь, что exit 3 будет выполнен только тогда, когда сработали команды command1 и command2. Но кажется, что даже если ls > /dev/null в порядке, exit 3 все еще срабатывает, делает echo 5 никогда не появлялся.

Что-нибудь, что я могу сделать, чтобы исправить это?

Проблема в том, что || связывает плотнее, чем ; , поэтому ваша первая строка состоит из двух команд: первая – составная команда: ls || ls || echo ls || ls || echo ls || ls || echo а второй – только exit 3 . Как упоминалось в комментарии meuh, вы должны написать

 ls a || ls > /dev/null || { echo "both command fails"; exit 3; } echo 5 # not showed up