`set -e` внутри функции bash

#!/bin/ash
for i in \
         '/path/to/directory'  \
         '/path/to/directory1' \
         '/path/to/directory2' \
;do
    chmod 775 "$i"
    chown -R http:http "$i"
    cd "$i" && \
    find . \
       -type d -exec chmod 775 {} \; \
                  -o \
       -type f -exec chmod 664 {} \;
    done

Объяснение

Поскольку вы выполняете тот же набор операций с dir1 / 2/3, имеет смысл переместить их в цикл.

Две команды поиска также можно переместить внутрь одной с помощью правил логической логики.

1
18.11.2017, 03:32
1 ответ

Примечание :приведенные здесь утверждения относятся к Bash версии 4.0.35 и выше. Реализацииset -eсильно различаются в разных оболочках/версиях . Следуйте совету Стефана и не используйте set -e.

man bashв разделе «Встроенные команды оболочки»/setобъясняет довольно хорошо, хотя текст немного запутан и требует некоторого внимания. На ваши конкретные вопросы ответы:

  • set -eведет себя по-другому здесь... по сравнению с..-Зависит от того, что вы подразумеваете под "по-другому", но я подозреваю, что вы сочтете ответ "нет"... здесь нет хитрых правил определения области видимости. Он действует достаточно линейно.
  • Принадлежит ли набор -e внутри функций?-Совершенно верно.
  • Влияет ли набор -e, объявленный вне функций, на «вложенные» функции внутри файла оболочки?-Да
  • А как насчет обратного?-set -eв функции, а затем столкнуться с нулевым статусом, отличным от -после возврата? Да, это выйдет.
8
27.01.2020, 23:18

Теги

Похожие вопросы