it-swarm-ru.tech

Bash: запустить команду, если команда не удалась

Я хочу сделать что-то вроде этого:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

Как мне это сделать?

51
michelemarcon

Они должны делать то, что вам нужно:

cmd1 && cmd2 && echo success || echo epic fail

или

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
79
Petr Uzel

Петр Узел на месте, но вы также можете играть с волшебным $ ?.

$? содержит код завершения последней выполненной команды, и если вы используете его, вы можете писать свои сценарии достаточно гибко.

Этот вопрос немного затрагивает эту тему: Лучшая практика использования $? In bash? .

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

Тогда вы также можете реагировать на разные коды выхода и делать разные вещи, если хотите.

25
Johan

Псевдокод в вопросе не соответствует названию вопроса.

Если кому-то действительно нужно знать, как запустить команду 2, если команда 1 не выполнена, это простое объяснение:

  • cmd1 || cmd2: Это запустится cmd1, и в случае сбоя он запустится cmd2
  • cmd1 && cmd2: Это запустится cmd1, и в случае успеха он запустится cmd2
  • cmd1 ; cmd2: Это запустится cmd1, и тогда он запустится cmd2, независимо от неудачи или успеха выполнения cmd1.
17
Orlando Rivera Letelier