Вопрос или проблема
Предположим, у меня есть скрипт, который получает путь в качестве параметра. Как я мог бы выполнить все скрипты, находящиеся по этому пути?
Предположим, под путем вы имели в виду путь к каталогу, используйте run-parts
. Из man run-parts
:
run-parts - запуск скриптов или программ в каталоге
Сначала вам нужно установить разрешение на выполнение на всех скриптах, которые вы хотите запустить. Обычно run-parts
игнорирует каталоги и также файлы, которые не являются исполняемыми и находятся в этом каталоге.
Однако перед запуском вы должны проверить, какие файлы будут запущены с помощью опции --test
:
run-parts --test /path/to/directory
Я должен упомянуть, что run-parts
имеет строгую соглашение о наименовании скриптов для выполнения:
Если не указаны ни опция --lsbsysinit, ни опция --regex,
то имена должны состоять полностью из ASCII заглавных и
строчных букв, ASCII цифр, ASCII подчеркиваний и ASCII дефисов.
Посмотрите man run-parts
, чтобы получить больше информации.
Run-parts будет работать, если ваши скрипты имеют правильные имена. Если вы не хотите изменять имена своих скриптов, чтобы соответствовать сложной схеме именования 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 ]
) и только если оба эти теста успешны, попытается выполнить файл.
Ответ или решение
Для выполнения всех скриптов в указанном каталоге, вы можете использовать утилиты, доступные в Unix-подобных системах. Рассмотрим несколько методов, как это можно сделать, уделяя внимание деталям, которые помогут обеспечить надежность и эффективность процесса.
1. Использование утилиты run-parts
Утилита run-parts
предназначена для последовательного выполнения скриптов, находящихся в директории. Она предлагает удобный способ запуска всех скриптов, при условии соблюдения строгих требований к их именованию. Прежде чем использовать этот метод, убедитесь, что все файлы имеют разрешения на выполнение.
Шаги для использования run-parts
:
-
Проверьте, какие скрипты будут исполнены:
run-parts --test /путь/к/директории
Этот тестовый режим поможет вам увидеть, какие именно файлы будут выполнены, что позволит избежать потенциальных проблем.
-
Запуск скриптов:
run-parts /путь/к/директории
Учтите, что если опции
--lsbsysinit
или--regex
не заданы, имена файлов должны состоять исключительно из букв латинского алфавита, цифр, подчеркиваний и дефисов.
2. Альтернативные методы выполнения
Если у вас нет желания или возможности следовать строгой схеме именования, можно использовать обыкновенный цикл for
в оболочке bash
, чтобы выполнить все файлы, отвечающие условиям.
Метод с использованием цикла for
:
-
Простое выполнение всех файлов:
for file in /путь/к/директории/*; do "$file" 2>/dev/null; done
Этот вариант подойдет, если вы хотите запусить все файлы независимо от их типа, при этом исключая сообщения об ошибках.
-
Проверка типа и разрешений:
for file in /путь/к/директории/*; do [ -f "$file" ] && [ -x "$file" ] && "$file" done
Этот более надежный способ включает проверки: это файл и имеет ли он право на выполнение. Таким образом, вы минимизируете риск ошибок.
Заключение
При выборе подхода к массовому запуску скриптов из каталога важно учесть структуру ваших файлов и их названия. Утилита run-parts
подходит для сценариев с четкими требованиями к именам, тогда как цикл for
обеспечивает большую свободу и гибкость. Всегда предоставляйте правильные разрешения на выполнение и внимательно проверяйте выполняемые файлы, чтобы избежать крипиационных и системных ошибок.