Я пытаюсь сделать что-то похожее на"try .. catch" с bash, для которого я прочитал из этого поста , что хороший вариант как-то копировать try / улов это использовать || и && операторы. В моем случае у меня есть фрагмент кода, который должен заархивировать некоторые файлы, но на самом деле zip пуст, поэтому он выдает ошибку:
zip -v OUTPUT.zip file1 file2 >> $LOGFILE 2>&1
Затем в LOGFILE я вижу:
zip error: Nothing to do! (OUTPUT.zip)
zip warning: OUTPUT.zip not found or empty
...(continued error message)
Так что я делаю это вместо этого, чтобы «поймать ошибку»
{ zip -v OUTPUT.zip file1 file2 >> $LOGFILE 2>&1 } || { printf "Error while zipping!" >> $LOGFILE && exit 1 }
.., что частично работает. Он выходит из кода, но не выполняет команду printf (или, по крайней мере, я не вижу ее в LOGFILE).
Кроме того, , хотя он встречает команда «exit 1» (в строке 115), у меня также есть сообщение (строка 120 - моя последняя строка):
line 120: syntax error: unexpected end of file
Что не так в моей команде? Почему он не выполняет печать, и почему сообщение «неожиданный конец файла»? Извините, если этот вопрос больше относится к общему программированию bash, чем к использованию || &&, но я не знал, как иначе классифицировать это.
Большое спасибо!