У меня есть сценарий оболочки, который читает текстовый файл и использует его содержимое.Все идет нормально.Но сейчас я пытаюсь заставить скрипт завершиться, если файл не найден.Сценарий выглядит так:
#!/bin/bash
function errorcatcher() {
errorcode=$?
echo "ERROR CODE : ${errorcode}"
exit ${errorcode}
}
trap errorcatcher ERR
MYFILE=$1
IFS='|'
while read line; do
echo ${line}
done < ${MYFILE}
echo "Execution complete"
И я запускаю сценарий как
sh myscript.sh /home/mydir/ABC.txt
, и он отлично работает.Но если я попробую это
sh myscript.sh /home/mydir/nonexisting.file
, я получу
myscript.sh: line 17: /home/mydir/nonexisting.file: No such file or directory
Execution complete
Функция errorcatcher
не вызывается, и вместо выхода с кодом ошибки выполнение продолжается, и я получаю строкуExecution complete
даже если рассматриваемый файл не существует.Я предполагаю, что здесь не генерируется никаких ошибок, поэтому я добавил эту строку перед чтением текстового файла
ls ${MYFILE}
На этот раз вызывается errorcatcher
.Но если я попробую
sh myscript.sh /home/mydir/ABC.tx
Вместо существующего файла ABC.txt
, я передаю его неполное имя ABC.tx
, и снова, функция errorcatcher
не вызывается, и сценарий завершается успешно (Execution complete
получаетповторил).
Может ли кто-нибудь помочь мне с этим?Мне любопытно, почему errorcatcher
не вызывается
- для несуществующего файла без
ls
- для неполного имени файла (ABC.tx) с
ls