Как запустить все сценарии в каталоге в Linux
На днях я тестировал несколько базовых сценариев оболочки, которые создал ради развлечения. Поскольку я новичок в написании сценариев оболочки, я запускал и тестировал сценарии один за другим. Ничего страшного, если скриптов было всего несколько. Поскольку количество сценариев росло, я обнаружил, что тестирование их всех занимает немного времени. После небольшого поиска в Интернете я нашел несколько способов запускать все сценарии в каталоге Linux один за другим.
Запуск всех скриптов в каталоге в Linux
У меня есть пара сценариев в каталоге «Документы».
$ ls Documents/
linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh
Все они представляют собой простые однострочные сценарии оболочки, которые отображают заданные строки с помощью команды «echo» в стандартном выводе.
Прежде чем я узнал, что мы можем запускать все сценарии в папке, я обычно делал сценарий исполняемым, например:
chmod +x script.sh
Затем я запускаю его с помощью команды:
./script.sh
Или,
sh script.sh
Опять же, я делаю второй скрипт исполняемым, запускаю его и так далее.
Что ж, есть лучший способ сделать это. Мы можем запустить все сценарии в каталоге или пути, используя команду "run-parts". Команда run-parts используется для запуска сценариев или программ в каталоге или пути.
run-parts <directory-path>
Одним из недостатков команды run-parts является то, что она не выполняет все сценарии. Это будет работать только в том случае, если ваши скрипты имеют правильные имена. Имена должны полностью состоять из прописных и строчных букв ASCII, цифр ASCII, символов подчеркивания ASCII и минус дефисов ASCII.
Чтобы решить эту проблему с именованием, мы можем использовать опцию regex. Например, следующая команда найдет и запустит все файлы сценариев в каталоге ~/Documents, которые начинаются с буквы «s» и заканчиваются расширением «sh»:
run-parts --regex '^s.*sh$' ~/Documents
Запустите все сценарии в каталоге в Linux с помощью команды run-parts.
Устранение неполадок:
Если вы столкнулись с ошибкой, как показано ниже;
run-parts: failed to exec Documents/script1.sh: Exec format error
Чтобы исправить это, обратитесь к следующему руководству.
- Исправить «ошибку формата Exec» при запуске сценариев с помощью команды run-parts
Аналогично, чтобы запустить все файлы сценариев, оканчивающиеся на .sh в каталоге «Документы», выполните:
run-parts --regex '.*sh$' ~/Documents
Чтобы напечатать имена всех файлов в каталоге «Документы», которые начинаются с буквы «s» и заканчиваются расширением «sh», выполните:
$ run-parts --list --regex '^s.*sh$' Documents
Documents/script1.sh
Documents/script2.sh
Documents/script3.sh
Documents/script4.sh
Эта команда выведет только имена файлов сценариев, но не выполнит их.
Чтобы просмотреть все файлы, заканчивающиеся на .sh в каталоге «Документы», запустите:
$ run-parts --list --regex '.*sh$' Documents
Documents/linux.sh
Documents/ostechnix.sh
Documents/script1.sh
Documents/script2.sh
Documents/script3.sh
Documents/script4.sh
Команда run-parts в основном используется заданиями cron и не подходит для использования вручную.
Еще один способ избежать необходимости переименовывать сценарии в соответствии со структурой именования run-parts — использовать команды find или for цикл.
Чтобы найти и запустить все файлы сценариев, начинающиеся с буквы "s" в папке ~/Documents, выполните:
find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} \;
Если вы хотите запускать все сценарии в данном каталоге и во всех его подкаталогах, удалите параметр maxlength в приведенной выше команде:
find ~/Documents -type f -executable -name 's*' -exec {} \;
Чтобы запустить все скрипты, оканчивающиеся на расширение .sh", выполните:
find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;
Найдите и запустите все сценарии в каталоге Linux с помощью команды find.
У этого метода есть и небольшой недостаток. Эта команда может запускать только те сценарии, которые могут интерпретироваться вашей текущей оболочкой. Если вы хотите запускать сценарии всех типов, например awk, perl, python, сценарии оболочки, используйте метод цикла for, как показано ниже.
for f in ~/Documents/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Приведенная выше команда запустит сценарии, имена которых начинаются с буквы «s», в папке ~/Documents. Если вы хотите запускать все файлы, оканчивающиеся на расширение «.sh», выполните:
for f in ~/Documents/*.sh ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Более подробную информацию можно найти на страницах руководства.
man run-parts
man find
Надеюсь это поможет.