Я пытаюсь сделать функцию, которая может прервать выполнение скрипта (из-за фатальную ошибку): примерПрервать Баш скрипт с помощью функции
quit() {
echo -e "[ERROR]" | log
exit 1
}
Вызова:
if [ "$#" -eq 1 ]; then
# Do stuff
else
echo -e "function getValue: wrong parameters" | log
quit
fi
Функция quit
называется (echo в файле журнала), но скрипт продолжает работать. Я прочитал, что exit
только завершает подоболочку (это правда?), Что означает, что она завершает функцию quit
, но не весь скрипт.
На данный момент я предпочитаю не использовать код возврата в методе quit
, поскольку он подразумевает много рефакторинга кода.
Есть ли способ остановить сценарий от функции quit
?
EDIT: полный пример случая, когда появляется ошибка:
#!/bin/bash
logfile="./testQuit_log"
quit() {
echo "quit" | log
exit 1
}
log() {
read data
echo -e "$data" | tee -a "$logfile"
}
foo() {
if [ "$#" -ne 1 ]; then
echo "foo error" | log
quit
fi
echo "res"
}
rm $logfile
var=`foo p1 p2`
var2=`foo p1`
echo "never echo that!" | log
EDIT2: он работает правильно, когда я включаю эти строки:
var=`foo p1 p2`
var2=`foo p1`
с
var= foo p1 p2
var2= foo p1
Любые объяснения? Это из-за подоболочки?
'exit' будет выйти из сценария. Функция не является скриптом. Это должно работать так, как написано. Можете ли вы написать короткий, но полный образец, который не работает так, как вы видите? –
Почему вы кладете '-e' на все эхо? Он не переносится и ничего не делает в обоих случаях, которые вы показываете. ('printf' будет интерпретировать C escape-последовательностей в своей строке формата и переноситься. Просто помните, что в отличие от echo он автоматически не добавляет' \ n', поэтому вам нужно добавить это в формат, если вы этого хотите.) – rici
Вопрос отредактирован. Я думаю, что нашел решение, но я не совсем уверен, что понимаю, что там происходит ... – DavidL