Ответ 1
Ну, вроде:
{ # your 'try' block
executeCommandWhichCanFail &&
mv output
} || { # your 'catch' block
mv log
}
rm tmp # finally: this will always happen
Есть ли команда linux bash, подобная java try catch, наконец? Или оболочка linux всегда продолжается?
try {
`executeCommandWhichCanFail`
mv output
} catch {
mv log
} finally {
rm tmp
}
Ну, вроде:
{ # your 'try' block
executeCommandWhichCanFail &&
mv output
} || { # your 'catch' block
mv log
}
rm tmp # finally: this will always happen
В зависимости от вашего примера, похоже, что вы пытаетесь сделать что-то похожее на всегда удаляющий временный файл, независимо от того, как выйдет 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
mv
принимает два параметра, так что может быть, вы действительно хотели бы оставить содержимое выходного файла:
echo `{ execCommand && cat output ; } || cat log`
rm -f tmp