{ # 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 принимает два параметра, так что может быть, вы действительно хотели бы оставить содержимое выходного файла: