Як виконати всі сценарії на шляху?


13

Припустимо, у мене є сценарій, який отримує шлях як параметр. Як я міг виконати всі сценарії, розташовані на цьому шляху?

Відповіді:


14

Припускаючи, що шляхом ви мали на увазі шлях до каталогу, використовуйте 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щоб отримати більше уявлень.


Трохи прочитавши, я виявив це: #! / Bin / bash scriptpts_to_run_dir = / home / you / Dropbox / scriptpts_to_run для скрипту в "$ scriptpts_to_run_dir" / * do if test -x "$ script"; тоді "$ script" fi зроблено Це працювало для мене, як ти думаєш?
Лаутаро Альварес

@LautaroAlvarez Що ви робите з цим сценарієм, можна легко зробити за допомогою простої команди .. run-parts /home/you/Dropbox/scripts_to_runбудьте обережні щодо називання, хоча ..
heemayl

бігати-частини - це круто. Але це зроблено для cron.d і записати в syslog як cron.notice. Але це гарне джерело ідей, як пропуск тимчасових та резервних файлів ...
mmv-ru

9

Запуск-частини працюватимуть, якщо ваші сценарії мають правильні назви. Якщо ви не хочете мати справу з перейменуванням своїх сценаріїв, щоб відповідати 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

Це дозволить перевірити, чи є кожен з результатів файлом ( [ -f $file ]), виконуваним файлом ( [ -x $file ]), і лише якщо обидва ці тести будуть успішними, він спробує виконати файл.


Цей для мене відмінно працював у проекті (роздвоєне репо), над яким я працюю - github.com/rattfieldnz/Vaprobash/blob/master/setup_projects.sh .
Роб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.