Como executar todos os scripts em um caminho?

11

Suponha que eu tenha um script que receba um caminho como parâmetro. Como eu poderia executar todos os scripts localizados nesse caminho?

    
por Lautaro Alvarez 10.05.2015 / 22:44

2 respostas

13

Assumindo por caminho que você quis dizer caminho para um diretório, use run-parts . De man run-parts :

run-parts - run scripts or programs in a directory

Primeiro, você precisa definir a permissão de execução em todos os scripts que deseja executar. Normalmente run-parts irá ignorar os diretórios e também os arquivos que não são executáveis residem nesse diretório.

Embora antes de executar, você deve verificar quais arquivos serão executados pela opção --test :

run-parts --test /path/to/directory

Devo mencionar que run-parts tem uma convenção de nomenclatura estrita para os scripts serem executados:

If neither the --lsbsysinit option nor the --regex option is given 
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.

Verifique man run-parts para ter mais ideia.

    
por heemayl 10.05.2015 / 22:50
8

As peças executadas funcionarão se seus scripts tiverem os nomes corretos. Se você não quiser lidar com renomear seus scripts para caber no esquema de nomenclatura complexa de run-parts , você pode fazer algo tão simples como

for file in ~/target/*; do $file 2>/dev/null; done

Isso tentará executar todos os arquivos (e diretórios) encontrados em ~/target . O 2>/dev/null redireciona as mensagens de erro para que ele não reclame ao tentar executar diretórios ou arquivos não executáveis.

Alternativamente, você pode tentar o mais sofisticado

for file in ~/target/*; do
    [ -f "$file" ] && [ -x "$file" ] && "$file"
done

Isto irá verificar se cada um dos resultados é um arquivo ( [ -f $file ] ), é executável ( [ -x $file ] ) e somente se ambos os testes forem bem sucedidos, ele tentará executar o arquivo.

    
por terdon 11.05.2015 / 00:37

Tags