1

command1 && command2 && echo "OK" || echo "FAIL"

Это выведет OK если обе команды были выполнены успешно, или FAIL если одна из команд не удалась.

Как я могу изменить это, чтобы напечатать:

  • OK если обе команды выполнены успешно,
  • FAIL 1 если command1 1 не выполнена, и
  • FAIL 2 если command2 не удалась?

3 ответа3

0

Есть много способов, например:

if ! command1; then
    echo 'FAIL 1'
elif ! command2; then
    echo 'FAIL 2'
else
    echo 'OK'
fi

Если дело только в быстрой отладке скрипта Bash, подумайте об использовании опции -x :

Команды печати и их аргументы по мере их выполнения.

0

Использование фигурных скобок для группировки команд (без создания подоболочки) будет работать:

command1 && { command2 && echo OK || echo FAIL2 } || echo FAIL1

Обратите внимание , что если command1 терпит неудачу, command2 не будет работать , так что вы просто получите FAIL1

Я также думаю, что эта конструкция не очень читабельна. Я считаю, что использование && хорошо работает для простых случаев, но для более сложных условий я предпочитаю использовать операторы if .

0

Вы также можете определить переменную (a) и писать только в конце, который был неудачной командой

 a=1 && cmd2 && a=2 && cmd1 && a=0 && echo ok || echo fail $a

Вы можете использовать это значение позже в скрипте ... по этой причине после последней команды вы можете сбросить значение до 0.

не элегантно, но как-то это работает. :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .