shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Script para rodar (ou não) outros scripts


From: Helton Moraes
Subject: Re: [shell-script] Script para rodar (ou não) outros scripts
Date: Sat, 27 Mar 2010 16:41:01 -0300

Uau, não esperava uma resposta tão densa!

Como sou partidário de que cada solução exige uma mínima maturidade por
parte do implementador, e como acho que ainda não tenho maturidade para
tanto (fui descobrir o que é e pra que serve o Zenity há 30 segundos atrás
na Wikipedia... Por sinal, muuito interessante... 8o), vou ARQUIVAR essa
resposta para referência futura, já que ela provavelmente vai me alargar as
perspectivas nos próximos estudos de Shell.

Ainda ontem... (não é a música aquela) consegui uma solução parcial para meu
problema, usando um script em shell e outro em octave, que por sua vez
invocam os arquivos com as análises, todos em octave.

Como tenho três categorias de diretório (uma onde estão todos os scripts,
outras onde estão espalhados os arquivos de dados, e outra onde eu pretendo
salvar os resultados), acabei optando por declarar, no local e no momento
adequado de cada script, variáveis correspondentes às pastas, uma única vez.
Assim, quando dentro das análises eu preciso que algo seja salvo em
determinado local, faço uma referência à variável em questão. Dessa forma,
quando eu quiser mudar tudo, é só mudar o caminho em um único local, que é
onde declaro a variável.

Antes disso, eu tinha feito algo do tipo:

find ~/pacientes/ -mindepth 2 -type d \           # a estrutura é
~/pacientes/determinado_paciente/determinado_exame/arq_de.dados
-exec ~/miotecscripts/Analise1.m '{}' \; \
-exec ~/miotecscripts/Analise2.m '{}' \; \
-exec ~/miotecscripts/Analise3.m '{}' \;

onde eu escapava a nova linha com um \, e poderia comentar cada linha entre
colchetes.
Digamos que não era muito prático...

Agora antes de terminar o email eu testei a tua resposta, ao menos a parte
com o zenity, e não é que funciona mesmo! Como não sabia que existia,
acrescentarei à lista de coisas que tenho a aprender agora (que não para de
aumentar):
1)bash
2)sed
3)regexp
4)octave
5)zenity ;o)

Quando chegar a hora certa, vou começar também a aumentar a biblioteca (por
enquanto só tem o piazinho verde (expressões regulares do aurélio)). Devagar
e sempre!

Obrigado pelo interesse, e até breve - com novidades, espero

Helton



Em 26 de março de 2010 21:49, Julio C. Neves <address@hidden>escreveu:

> Fala Helton,
> não sei se entendi bem, mas vc disse:
> "ter um script com várias linhas, onde cada linha se referiria a um tipo de
> análise, que eu poderia comentar para realizar só as análises que me
> interessam".
>
> Minha proposta é vc montar essas análises em um arquivo, o que melhora sua
> manutenção, pois não será necessário editar o script toda hora. Veja o
> arquivo que montei:
>
> $ cat analises
> analise1
> analise2
> analise3
> analise4
> analise5
>
> Bem criativo, né? ;)
>
> Agora vamos escolher as análises que vc quer fazer:
>
> $ Anas=$(zenity --list --checklist --text "Marque somente as análises que
> deseja executar" --column Marque --column Analise $(cat analises | xargs
> -n1
> echo false))
>
> Escolhi as 3 opções impares e resultou:
>
> $ echo $Anas
> analise1|analise3|analise5
>
> só que o zenity tem a opção --separator, e este separador pode ser o
> *texto*
> que vc quiser. Então veja a mágica:
>
> $ Anas=$(zenity --list --checklist --text "Marque somente as análises que
> deseja executar" --column Marque --column Analise $(cat analises | xargs
> -n1
> echo false) --separator " ~/miotecscripts/")
> $ echo $Anas
> analise1 ~/miotecscripts/analise3 ~/miotecscripts/analise5
>
> Hiii! Ficou quase bom, só falta unzinho antes de todos. Então vamos
> colocá-lo:
>
> $ Anas=\~/miotecscripts/$(zenity --list --checklist --text "Marque somente
> as análises que deseja executar" --column Marque --column Analise $(cat
> analises | xargs -n1 echo false) --separator " ~/miotecscripts/")
> $ echo $Anas
> ~/miotecscripts/analise1 ~/miotecscripts/analise3 ~/miotecscripts/analise5
>
> Pronto! Está aí o que vc queria (ou pelo menos penso que é o que vc
> queria).
> Agora vamos voltar lá no seu find e tirar tudo a partir do -exec, guardando
> a saída na variável $Dirs. Ficaria assim:
>
> $ Dirs=$(find ~/pacientes/ -mindepth 2 -type d)
>
> Suponha que $Dirs tenha recebido dir1 e dir2  (continuo bem criativo, viu?)
> ;)
>
> Então agora é só fazer:
>
> $ echo $Anas | xargs -i eval {} $Dirs
>
> Se não entendeu ou se não for isso, podemos tentar outras coisas. O bacana
> desta solução é que ela ficou com 3 linhas (zenity, find e a linha de
> execução) e sem nenhum loop. Por isso é que desconfio qdo vejo um script
> com
> mais de 5 linhas... ;)
>
> OBS: Esta semana, a partir de 29/03, darei um curso de shell em SP (4Linux)
> no qual pode  se inscrever na hora. Vou dar 20% de abatimento para quem for
> da lista. Mas atenção!        Este abatimento valerá somente para este
> treinamento. Por favor quem for da lista e estiver no curso, se apresente.
> Conheço todos de nome e quase ninguém pessoalmente.
>
> Abraços,
> Julio
> Cursos de Shell e Zenity em 2 fins de semana?
> - SP turma de Shell em 29/03 - ligue (11)2125-4747;
> - Floripa turma Shell 12/04 http://www.seventreinamentos.com.br;
> - DF turma de Shell em 17/04 - ligue (61) 3223-3000;
> - Aracaju turma de Shell em 12/05 - address@hidden;
> - RJ turma de Shell em 14/06 - ligue (21)2210-6061;
> - Turmas fechadas em outras cidades ligue (21)  8112-9988.
>
>
> Em 26 de março de 2010 00:06, heltonbiker <address@hidden>
> escreveu:
>
> >
> >
> > Caros Colegas
> >
> > Estou aprendendo ShellScript e não consegui encontrar informações para
> > fazer o seguinte:
> >
> > Fiz (com ajuda) um script nomeado RunAnalyses.sh que contém o seguinte
> > comando, por enquanto único:
> >
> > find ~/pacientes/ -mindepth 2 -type d -exec ~/miotecscripts/MapaRelevo.m
> > '{}' 40 \;
> >
> > O objetivo é encontrar todas as pastas dois níveis abaixo (são elas que
> > contêm os dados a processar) e mandá-las para um script do GNU Octave,
> que
> > faz a análise de alguns arquivos de cada pasta e salva em uma única pasta
> de
> > saída, designada dentro do script MapaRelevo.m
> >
> > Acontece que estou criando outros módulos de análise, de forma que cada
> > arquivo do Octave (.m) faça um tipo de análise. Além disso, como são
> > análises para testar resultados de algoritmos, quase sempre vou querer
> rodar
> > apenas algumas análises específicas, embora pretenda usar sempre o mesmo
> > script.
> >
> > Imagino que eu poderia encadear vários -exec no mesmo find, mas o que
> > resolveria melhor meu problema seria (uma dessas):
> >
> > 1) ter um script com várias linhas, onde cada linha se referiria a um
> tipo
> > de análise, que eu poderia comentar para realizar só as análises que me
> > interessam;
> > 2) ter um script usando variáveis repassadas pela linha de comando, de
> > forma que eu pudesse rodar assim:
> > $ ./RunAnalyses.sh analise1 analise2 analise3
> > e cada análise seria na verdade um script do Octave.
> >
> > Além disso, dentro de cada arquivo Octave é dado um 'cd ~/saida' antes de
> > salvar os resultados. Acredito que o melhor seria salvar na mesma pasta,
> e
> > depois dar um 'mv' de todos os arquivos para uma pasta de saída. Assim,
> se
> > eu quisesse mudar a pasta de saída seria só mudar uma linha no script
> > RunAnalyses.sh, ao invés de mudar em cada um dos scripts Octave.
> >
> > Não espero receber respostas prontas, apenas alguma indicação de "boas
> > práticas" na escolha dos comandos mais adequados e, principalmente, na
> forma
> > de montar a estrutura do script, de forma a favorecer a flexibilidade,
> > principalmente.
> >
> > Grato pela atenção
> >
> > Helton Moraes
> >
> >
> >
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]