Executando scripts bash do script bash em outra pasta

2

Eu tenho várias pastas (uma para cada mês), cada uma com um script bash savetodatabase.sh . Eu quero executar todos eles um após o outro, então eu fiz um script chamado saveall.sh , que tem o seguinte código:

#!/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

No entanto, isso executa o script na pasta em que o saveall está, não as pastas nas quais os diferentes scripts estão. Como faço para corrigir isso, para que um único script possa executar todos os scripts "locais"?

    
por bjornasm 08.07.2015 / 17:28

2 respostas

2

Atualmente, você está de fato executando os scripts do diretório em que você possui o saveall. Se você deseja executar cada um dos scripts em suas pastas (suponho que você possa ter alguma saída que está registrando no pwd?), então o mais fácil provavelmente seria criar cd em cada uma das pastas e, em seguida, executar os scripts sh individuais. Então, algo como:

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

etc.

A referência a "base_dir" é para indicar o caminho completo para seus diretórios.

Alternativamente, e dependendo inteiramente das diferenças e complexidade de seus scripts savetodatabase, você poderá combinar o processo desses scripts em um único script com alguma lógica interna que permita a variação baseada no ano / mês. Se for apenas algumas mudanças de variáveis, você pode ter um arquivo 'config' do txt que o script lê e percorre (ou algum outro método para executar as variações) para obter a saída diferente.

Tudo depende de qual método para gerenciá-lo funciona melhor para você :)

    
por 08.07.2015 / 17:40
2

Isso executará todos os arquivos executáveis denominados savetodatabase.sh no diretório 2014 e seus subdiretórios, e cada executável será executado em seu diretório.

#!/usr/bin/env bash

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

Isso pressupõe, obviamente, que esses arquivos estejam marcados como executáveis.

    
por 08.07.2015 / 17:47