Дать попробуй поймать наконец-то в оболочке

Есть ли команда linux bash, подобная java try catch, наконец? Или оболочка linux всегда продолжается?

try {
   `executeCommandWhichCanFail`
   mv output
} catch {
    mv log
} finally {
    rm tmp
}

Ответ 1

Ну, вроде:

{ # your 'try' block
    executeCommandWhichCanFail &&
    mv output
} || { # your 'catch' block
    mv log
}

 rm tmp # finally: this will always happen

Ответ 2

В зависимости от вашего примера, похоже, что вы пытаетесь сделать что-то похожее на всегда удаляющий временный файл, независимо от того, как выйдет script. В Bash для этого попробуйте встроенную команду trap, чтобы уловить сигнал EXIT.

#!/bin/bash

trap 'rm tmp' EXIT

if executeCommandWhichCanFail; then
    mv output
else
    mv log
    exit 1 #Exit with failure
fi

exit 0 #Exit with success

Оператор rm tmp в trap всегда выполняется, когда script завершается, поэтому файл tmp всегда будет удален.

Установленные ловушки также могут быть reset; вызов ловушки с только именем сигнала будет reset обработчиком сигнала.

trap EXIT

Для получения дополнительной информации см. справочную страницу Bash: man bash

Ответ 3

mv принимает два параметра, так что может быть, вы действительно хотели бы оставить содержимое выходного файла:

echo `{ execCommand && cat output ; } || cat log`
rm -f tmp