Почему не выводится ошибка при завершения bash-скрипта?
Когда в bash скрипте я обращаюсь к не существующему файлу, скрипт выдает ошибку и завершает работу из-за этой ошибке.
#!/bin/bash
# чтобы скрипт автоматически завершался при ошибке
set -e
# читаем из файла
read < file
# не выполняется, так как была ошибка при чтение
echo no-continue
В терминал выводится:
./test: line 5: file: No such file or directory
Но когда я обращаюсь к пустому файлу, скрипт тоже завершается из-за ошибки, но не выводит никакую ошибку. почему?
#!/bin/bash
# чтобы скрипт автоматически завершался при ошибке
set -e
# создаем файл
touch file
# читаем из файла
read < file
# не выполняется, так как была ошибка при чтение
echo no-continue
В терминал ни чего не выводится. Почему не выводит ошибку в терминал?
Ответы (1 шт):
В первом случае ошибка относится не к read, а к самому интерпретатору: он не может создать перенаправление < file, о чём и сообщает.
Во втором случае read возвращается с ненулевым кодом, прочитав файл file до конца:
The exit status is zero, unless end-of-file is encountered
Для read этот ненулевой код не является ошибкой. Так как в большинстве случаев read используется внутри циклов while read ... ; do ... ; done, конец файл должен приводить к выходу из цикла. Ненулевой статус read как раз обеспечивает выход из цикла. Если бы read каждый раз печатал сообщение о EOF, это было бы очень неудобно.