What вам не хватает того, что set -e
и sigspec ERR
оба применяются к выполнению команды (команды, которые завершаются с ненулевым значением). То, что у вас здесь с b = $ ((h +))
, - это ошибка синтаксического анализа . Команда не выполняется, потому что она не распознана.
Почему это работает в функции или под-оболочке? Поскольку эта ошибка синтаксического анализа приводит к сбою содержащего скрипта (будь то функция или вспомогательная оболочка) в целом. Другими словами, это не b = $ ((h +))
, который запускает вашу ловушку (в ваших суб-оболочках ловушка не установлена), это ошибка вызова мусора
или в вашу подоболочку.
не может указать "вещь"
означает, что что-то ожидает, что файл или каталог существует (в данном случае, вероятно, каталог с именем "run") и пытается произвести на нем операцию, но обнаруживает, что его там нет. Значение исходит из системного вызова stat (1)
, который считывает метаданные ссылки (то есть файла, каталога, сокета, символической ссылки и т. Д.) В файловой системе.
Просматривая ваш журнал ошибок, install
- это исполняемый файл (то есть скрипт или двоичный файл), который пытается выполнить доступ run
, но он не существует, в результате чего возникает ошибка. .