Предположим, у меня есть скрипт, который получает путь в качестве параметра. Как я могу выполнить все сценарии, расположенные по этому пути?
Предположим, у меня есть скрипт, который получает путь в качестве параметра. Как я могу выполнить все сценарии, расположенные по этому пути?
Ответы:
Предполагая, что под путем вы подразумевали путь к каталогу, используйте 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 ]
) и только если оба эти теста пройдут успешно, он попытается выполнить файл.