Предположим, у меня есть скрипт, который получает путь в качестве параметра. Как я могу выполнить все сценарии, расположенные по этому пути?
Предположим, у меня есть скрипт, который получает путь в качестве параметра. Как я могу выполнить все сценарии, расположенные по этому пути?
Ответы:
Предполагая, что под путем вы подразумевали путь к каталогу, используйте run-parts. От man run-parts:
run-parts - run scripts or programs in a directory
Сначала вам нужно установить разрешение на выполнение всех скриптов, которые вы хотите запустить. Обычно run-partsигнорирует каталоги, а также файлы, которые не являются исполняемыми, находятся в этом каталоге.
Хотя перед запуском вы должны проверить, какие файлы будут запускаться с помощью --testопции:
run-parts --test /path/to/directory
Я должен упомянуть, что run-partsесть строгое соглашение об именах для скриптов, которые будут выполнены:
If neither the --lsbsysinit option nor the --regex option is given
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.
Проверьте, man run-partsчтобы получить больше идей.
run-parts /home/you/Dropbox/scripts_to_runхотя будьте осторожны с именами ..
Запущенные части будут работать, если ваши скрипты имеют правильные имена. Если вы не хотите иметь дело с переименованием ваших скриптов в соответствии run-partsсо сложной схемой именования, вы можете сделать что-то простое, например:
for file in ~/target/*; do $file 2>/dev/null; done
Это попытается выполнить все файлы (и каталоги), найденные в ~/target. Эти 2>/dev/nullсообщения об ошибках переадресовывает , поэтому он не будет жаловаться при попытке запуска каталогов или не являющихся исполняемые файлы.
Кроме того, вы можете попробовать более сложные
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
Это проверит, является ли каждый из результатов file ( [ -f $file ]), выполнимым ( [ -x $file ]) и только если оба эти теста пройдут успешно, он попытается выполнить файл.