Как выполнить несколько других команд удара в строке после того, как первое перестало работать

Когда некоторая команда (из сценария удара) сбои, сообщение об ошибке должно быть выпущено, и затем из сценария нужно выйти.

Позволяет просто показывают пример (с последней командой, перенесенной в строку эха для более легкого тестирования):

$ which which || echo "failed"; echo "exit 1"
/usr/bin/which
exit 1
$ which which1 || echo "failed"; echo "exit 1"
failed
exit 1

Поскольку Вы видите, что пример делает/exit/в любом случае. Вместо этого это только должно выйти для второго случая. Как решить это для достижения желаемого поведения? Я предполагаю, что существуют некоторые опции, встроенные в удар для группировки объектов команды № 2 и № 3...

1
задан 15 January 2020 в 17:56

2 ответа

Можно или использовать подоболочку, поскольку Вы показываете в своем ответе:

which which1 || ( echo "failed"; echo "exit 1" )

или группа команды, не запуская отдельную подоболочку:

which which1 || { echo "failed"; echo "exit 1"; }

Примечание: для получения дополнительной информации о { } по сравнению с ( ), посмотрите, что "Составные Команды" и "УПРАВЛЯЮТ СРЕДОЙ ВЫПОЛНЕНИЯ" разделы man bash.

Или, можно сделать что-то вроде этого, что позволяет Вам создать более сложные обработчики:

#!/bin/bash

which "$1"

if [[ $? != 0 ]]; then
  echo "Failed: Exited with $?"
  exit 1
else
  echo "Worked!"
fi

Вы могли также записать это как функцию:

#!/bin/bash
runme(){
  "$@"
  if [[ $? != 0 ]]; then
    echo "Failed: Exited with $?"
    exit 1
  else
    echo "Worked!"
  fi
}

runme which which1

Или, проще если Вам не нужен статус выхода, который покажут:

#!/bin/bash
runme(){
  if "$@"; then
    echo "Worked"
  else
    echo "Failed!"
    exit 1
  fi
}

runme which which
2
ответ дан 19 January 2020 в 09:13

Это очевидно решает его:

$ which which || ( echo "failed"; echo "exit 1" )
/usr/bin/which
$ which which1 || ( echo "failed"; echo "exit 1" )
failed
exit 1

Группировка команд в ударе сделана с помощью круглых фигурных скобок.

1
ответ дан 19 January 2020 в 09:13

Другие вопросы по тегам:

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