Припустимо, у мене є сценарій, який отримує шлях як параметр. Як я міг виконати всі сценарії, розташовані на цьому шляху?
Припустимо, у мене є сценарій, який отримує шлях як параметр. Як я міг виконати всі сценарії, розташовані на цьому шляху?
Відповіді:
Припускаючи, що шляхом ви мали на увазі шлях до каталогу, використовуйте 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
Це дозволить перевірити, чи є кожен з результатів файлом ( [ -f $file ]), виконуваним файлом ( [ -x $file ]), і лише якщо обидва ці тести будуть успішними, він спробує виконати файл.