Suponha que eu tenha um script que receba um caminho como parâmetro. Como eu poderia executar todos os scripts localizados nesse caminho?
Suponha que eu tenha um script que receba um caminho como parâmetro. Como eu poderia executar todos os scripts localizados nesse caminho?
Respostas:
Supondo que por caminho você quis dizer caminho para um diretório, use run-parts
. De man run-parts
:
run-parts - run scripts or programs in a directory
No início, você precisa definir a permissão de execução em todos os scripts que deseja executar. Normalmente run-parts
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 --test
opção:
run-parts --test /path/to/directory
Devo mencionar que run-parts
possui uma convenção de nomenclatura estrita para que os scripts sejam 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.
Marque man run-parts
para ter mais ideia.
run-parts /home/you/Dropbox/scripts_to_run
.BE cuidado com a nomeação embora ..
As peças executadas funcionarão se seus scripts tiverem os nomes corretos. Se você não deseja renomear seus scripts para se adequar ao run-parts
esquema de nomeação complexo, faça algo tão simples quanto
for file in ~/target/*; do $file 2>/dev/null; done
Isso tentará executar todos os arquivos (e diretórios) encontrados no ~/target
. O 2>/dev/null
redireciona as mensagens de erro para não reclamar ao tentar executar diretórios ou arquivos não executáveis.
Como alternativa, você pode tentar o mais sofisticado
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
Isso verificará se cada um dos resultados é um arquivo ( [ -f $file ]
), é executável ( [ -x $file ]
) e somente se os dois testes forem bem-sucedidos, ele tentará executar o arquivo.