В настоящее время я использую bash 4.1 и использую функцию для выполнения SVN-кошки в файле репозитория.После этого он выполняет итерацию по каждой строке для выполнения некоторых преобразований (в основном, конкатенации и тому подобное).Если указанный файл не существует, сценарий должен остановиться с сообщением об ошибке.Сценарий выглядит следующим образом:
function getFile {
svnCat=`svn cat (file) 2>&1`
if [[ -n $(echo "$svnCat" | grep "W160013") ]]; then # W160013 is the returned value by SVN stderr case a file doesn't exist
echo "File doesn't exist" >&2
exit 1
else
echo "$svnCat" | while read -r; do
#Do your job
done
fi
}
function processFile{
while read -r do
#do stuff
done < <(getFile)
#do even more stuff
}
Однако в ситуациях, когда файл не существует, сообщение об ошибке выводится один раз, но сценарий продолжает выполняться.Есть ли способ обнаружить, что цикл while не удался и должен полностью остановить скрипт?
Невозможно использовать опцию set -e, поскольку мне требуется удалить некоторые файлы, созданные в процессе.
Обновление : Я пытался добавить ||завершить работу после команды done следующим образом:
function processFile{
while read -r do
#do stuff
done || exit 1 < <(getFile)
Однако скрипт ожидает вывода пользователя, и когда я нажимаю клавишу ввода, он выполняет содержимое цикла while