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: Julio C. Neves
Subject: Re: [shell-script] Script para rodar (ou não) outros scripts
Date: Fri, 26 Mar 2010 21:49:14 -0300

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]



reply via email to

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