Как выполнить все скрипты в указанном пути?

Вопрос или проблема

Предположим, у меня есть скрипт, который получает путь в качестве параметра. Как я мог бы выполнить все скрипты, находящиеся по этому пути?

Предположим, под путем вы имели в виду путь к каталогу, используйте 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:

  1. Проверьте, какие скрипты будут исполнены:

    run-parts --test /путь/к/директории

    Этот тестовый режим поможет вам увидеть, какие именно файлы будут выполнены, что позволит избежать потенциальных проблем.

  2. Запуск скриптов:

    run-parts /путь/к/директории

    Учтите, что если опции --lsbsysinit или --regex не заданы, имена файлов должны состоять исключительно из букв латинского алфавита, цифр, подчеркиваний и дефисов.

2. Альтернативные методы выполнения

Если у вас нет желания или возможности следовать строгой схеме именования, можно использовать обыкновенный цикл for в оболочке bash, чтобы выполнить все файлы, отвечающие условиям.

Метод с использованием цикла for:

  1. Простое выполнение всех файлов:

    for file in /путь/к/директории/*; do "$file" 2>/dev/null; done

    Этот вариант подойдет, если вы хотите запусить все файлы независимо от их типа, при этом исключая сообщения об ошибках.

  2. Проверка типа и разрешений:

    for file in /путь/к/директории/*; do
       [ -f "$file" ] && [ -x "$file" ] && "$file"
    done

    Этот более надежный способ включает проверки: это файл и имеет ли он право на выполнение. Таким образом, вы минимизируете риск ошибок.

Заключение

При выборе подхода к массовому запуску скриптов из каталога важно учесть структуру ваших файлов и их названия. Утилита run-parts подходит для сценариев с четкими требованиями к именам, тогда как цикл for обеспечивает большую свободу и гибкость. Всегда предоставляйте правильные разрешения на выполнение и внимательно проверяйте выполняемые файлы, чтобы избежать крипиационных и системных ошибок.

Оцените материал
Добавить комментарий

Капча загружается...