Запуск скриптов bash из скрипта bash в другой папке

у меня есть несколько папок (по одной на каждый месяц), каждая со скриптом 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 лежит в, а не папки, в которых лежат различные сценарии. Как это исправить, чтобы один сценарий мог запускать все" локальные " сценарии?

5
задан bjornasm
источник

2 ответов

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

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

etc.

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

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

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

2
отвечен user876 2015-07-08 17:28:24
источник

будут запущены все исполняемые файлы с именем 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

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

2
отвечен Parthian Shot 2015-07-08 17:07:41
источник

Другие вопросы bash script shell