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

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

Re: [shell-script] Dúvida besta porem persistente


From: Breno Moiana
Subject: Re: [shell-script] Dúvida besta porem persistente
Date: Tue, 30 Sep 2008 09:57:33 -0300

Achei as soluções apresentadas aqui muito interessantes, e fui usar.
Cheguei a uma dúvida bem simples até: com cat esse tipo de
concatenação direta funciona. Mas em termos de mecânica de script, não
substitui um loop. Temos um atalho para loop que nao seja o uso do for
com toda a sua sintaxe? (Administrador bom é administrador preguiçoso,
não é isso, Julio? ;)

Já explico:

arquivos:
    -rwxr-xr-x   1 evrbatch   sapbatch        17 Sep 30 07:45 mycat.sh
    -rw-r--r--   1 evrbatch   sapbatch        53 Sep 30 07:49 um
    -rw-r--r--   1 evrbatch   sapbatch        54 Sep 30 07:49 dois
    -rw-r--r--   1 evrbatch   sapbatch        48 Sep 30 07:49 tres
    -rw-r--r--   1 evrbatch   sapbatch        13 Sep 30 07:44 lista

Conteudo do mycat.sh:
    #/bin/ksh
    cat $1

Agora... vejam só

    $ cat lista
    um
    dois
    tres

    $ cat $(<lista)
    um
    umaumaumaumumu mum aumaum uamua maumamuau maumuam
    dois
    doisodisodisodi sodisoidosidos dosidosiodisodi s
    tres
    trstsrter strestersteserstrestrestrtesrets


Até aí, tudo bem. Porém, se uso meu script, ele só pega o primeiro:

    $ ./mycat.sh $(<lista)
    um
    umaumaumaumumu mum aumaum uamua maumamuau maumuam

Eu acredito que isso seja porque o cat me permite passar vários
arquivos como parâmetro, enquanto meu script só usa o $1.

Trocando no script o $1 por $*:

    $ ./mycat.sh $(<lista)
    um
    umaumaumaumumu mum aumaum uamua maumamuau maumuam
    dois
    doisodisodisodi sodisoidosidos dosidosiodisodi s
    tres
    trstsrter strestersteserstrestrestrtesrets

Mas e se eu nao quiser/puder mudar o script, ou se for um comando que
só suporta um parametro por vez? Temos outras opções ao invés do loop?

    $ for parm in $(cat lista); do ./mycat.sh $parm;done
    um
    umaumaumaumumu mum aumaum uamua maumamuau maumuam
    dois
    doisodisodisodi sodisoidosidos dosidosiodisodi s
    tres
    trstsrter strestersteserstrestrestrtesrets

Abraço!

Breno.
--




2008/9/26 Julio C. Neves <address@hidden>:
> Fala Fabiano,
> Cara, adorei a sua resposta. Muito inteligente!!!!
> --
> Abraços,
> Julio
> *Em setembro estarei dando um treinamento
> Shell em São Paulo (em 2 fins de semana).
> Mais informações: www.4linux.com.br
> Tel: (11) 2125-4747
> *
> 2008/9/26 Fabiano Caixeta Duarte <address@hidden>
>
>> 2008/9/26 André Saunite <address@hidden <saunite%40gmail.com>>
>
>>
>>
>> > Olá,
>> >
>> > Já tentou assim?
>> >
>> > cat $(cat lista.txt)
>> >
>> > Abs,
>> > André Saunite
>> >
>> > 2008/9/26 allan_hkrs <address@hidden<allan_hkrs%40yahoo.com.br>
>> >:
>> > > Estou com uma duvida besta, porem nao arranjo solução para a mesma,
>> > > ja pesquisei e nao achei nada relacionado, alguem sabe como posso
>> > > passar uma valor de um txt ou de um pipe direto para uma linha de
>> > > comando? Vou dar um exemplo do que estou querendo fazer. Supondo que
>> > > eu tenha um arquivo lista.txt com o conteudo:
>> > >
>> > > juliosoares.txt
>> > > robertosoares.txt
>> > > carlosdesouza.txt
>> > > alvaro.txt
>> > > augustosoares.txt
>> > >
>> > > digamos que eu queira fazer um cat nos arquivos nessa ordem.. Como eu
>> > > posso "passar" o valor para a linha de comando sem digitar linha por
>> > > linha? Por exemplo:
>> > >
>> > > cat juliosoares.txt robertosoares.txt augustosoares.txt
>> > >
>> > > Ao inves de digitar 1 por 1, faria um grep e passaria o valor da
>> > > saida padrao para a linha de comando, sem opções de cada programa, de
>> > > forma generalizada, entenderam? Quem puder ajudar...
>> > >
>> > > Allan
>> >
>>
>> A mesma solução, mas com uma pequena variação ;)
>>
>> cat $(<lista.txt)
>>
>> --
>> Fabiano Caixeta Duarte
>> Especialista em Redes de Computadores
>> Linux User #195299
>> Ribeirão Preto - SP
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>>
>
> --
> Abraços,
> Julio
> Em setembro estarei dando um treinamento
> Shell em São Paulo (em 2 fins de semana).
> Mais informações: www.4linux.com.br
> Tel: (11) 2125-4747
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 


reply via email to

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