#!/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, имеет смысл переместить их в цикл.
Две команды поиска также можно переместить внутрь одной с помощью правил логической логики.
Примечание :приведенные здесь утверждения относятся к Bash версии 4.0.35 и выше. Реализацииset -e
сильно различаются в разных оболочках/версиях . Следуйте совету Стефана и не используйте set -e
.
man bash
в разделе «Встроенные команды оболочки»/set
объясняет довольно хорошо, хотя текст немного запутан и требует некоторого внимания. На ваши конкретные вопросы ответы:
set -e
ведет себя по-другому здесь... по сравнению с..-Зависит от того, что вы подразумеваете под "по-другому", но я подозреваю, что вы сочтете ответ "нет"... здесь нет хитрых правил определения области видимости. Он действует достаточно линейно. set -e
в функции, а затем столкнуться с нулевым статусом, отличным от -после возврата? Да, это выйдет.