2

У меня есть несколько папок (по одной на каждый месяц), каждая со скриптом bash savetodatabase.sh . Я хочу запустить их все друг за другом, поэтому я создал скрипт с именем saveall.sh который имеет следующий код:

#!/bin/bash
sh 2014/07-Jul/savetodatabase.sh
sh 2014/08-Aug/savetodatabase.sh
sh 2014/09-Sep/savetodatabase.sh
sh 2014/10-Oct/savetodatabase.sh
sh 2014/11-Nov/savetodatabase.sh
sh 2014/12-Dec/savetodatabase.sh

Тем не менее, он запускает скрипт в папке saveall, а не в папках, в которых находятся разные скрипты. Как это исправить, чтобы один скрипт мог запускать все "локальные" скрипты?

2 ответа2

2

В настоящее время вы фактически запускаете сценарии из каталога, в котором вы сохраняете все. Если вы хотите запустить каждый из сценариев в их папках (я предполагаю, что у вас может быть какой-то вывод, который регистрируется на pwd?) тогда самым простым способом было бы, вероятно, перейти в каждую из папок и затем запустить отдельные сценарии sh. Так что-то вроде:

#!/bin/bash
cd base_dir/2014/07-Jul
sh savetodatabase.sh
cd base_dir/2014/08-Aug
sh savetodatabase.sh

и т.п.

Ссылка на "base_dir" означает, что используется полный путь к вашим каталогам.

В качестве альтернативы, и в зависимости от различий и сложности ваших сценариев savetodatabase, вы можете объединить процесс в этих сценариях в один сценарий с некоторой встроенной логикой, которая позволяет варьировать в зависимости от года / месяца. Если это просто какие-то изменения переменных, у вас может быть файл 'txt' config ', который скрипт читает и циклически просматривает (или какой-то другой такой метод для запуска вариантов), чтобы получить другой вывод.

Все зависит от того, какой метод управления лучше всего подходит для вас :)

2

Это запустит все исполняемые файлы с именем savetodatabase.sh в каталоге 2014 и его подкаталогах, и каждый исполняемый файл будет запущен в своем каталоге.

#!/usr/bin/env bash

find 2014 -type f -executable -name savetodatabase.sh | while read script
do
  cd "$(dirname "$script")"
  sh "$(basename "$script")"
  cd -
done

Это предполагает, конечно, что эти файлы помечены как исполняемые.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .