Bash: выполненный command2, если command1 перестал работать

Я использовал vimdiff для этого.

Вот является снимок экрана (не мой) показом незначительного одного или двух символьных различий, который выделяется вполне прилично. Быстрое учебное руководство также.

44
01.09.2017, 19:31
3 ответа

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

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

или

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
72
27.01.2020, 19:34
  • 1
    Это работает, но я смущен почему || не смотрит на вывод первого echo команда. –  mlissner 20.08.2015, 00:32
  • 2
    @mlissner, если еще ожидает к кодам выхода, 0 если команда, где запущено и 1 если где ошибки. Не читайте в выводе. Just try whoami && whoami && echo success || echo epic fail и теперь whoami && whoareyou && echo success || echo epic fail. Я не могу выяснить то, под чем Вы подразумеваете, "не смотрит на вывод первой команды эха" –  m3nda 09.02.2016, 16:41
  • 3
    @mlissner я думаю, что получил Ваш вопрос, но ответ - то, что команда эха не перестанет работать никогда. Таким образом, его возврат будет 0, т.е. truthy. Таким образом, условие, которое действительно имеет значение, справедливо cmd1 && cmd2 –  Kazim Zaidi 23.08.2017, 14:25

Petr Uzel является пятном на, но можно также играть с волшебным $?.

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

Это подвергает сомнению, касается этой темы немного, Лучшая практика для использования $? в ударе?.

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

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

23
27.01.2020, 19:34

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

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

  • cmd1 || cmd2:Запустится cmd1, а в случае сбоя запуститсяcmd2
  • cmd1 && cmd2:Это запустится cmd1, а в случае успеха запуститсяcmd2
  • cmd1 ; cmd2:Это запустится cmd1, а затем запустится cmd2, независимо от неудачи или успеха запуска cmd1.
74
27.01.2020, 19:34

Теги

Похожие вопросы