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 11:17:26 -0300

Até funcionou, mas tem um porém:

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

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

However, isso nao resolve, porque estamos chunchando para o cat dentro
do script receber o texto inteiro de uma vez.

A solução do jimmy funcionou direitinho:

    $ xargs -i ./myscript.sh {} < list
    um
    umaumaumaumumu mum aumaum uamua maumamuau maumuam
    dois
    doisodisodisodi sodisoidosidos dosidosiodisodi s
    tres
    trstsrter strestersteserstrestrestrtesrets

E desta vez temos três invocações do script, com um parametro cada uma.

bacana, resolvido, e  bem mais curto que um for :)

abraço!


Breno.
--




2008/9/30 Flavio Junior <address@hidden>:
> eu devo ta maluco, mas...
>
> $ ./mycat.sh "$(<lista)"
>
> ?
>
> --
>
> Flavio do Carmo Junior aka waKKu
>
> 2008/9/30 Breno Moiana <address@hidden>:
>
>> Na verdade, o script é só uma demonstracao, estou pensando se existe
>> uma solução genérica que nao involva tocar no codigo do script.
>> Suponha, por exemplo, que seja um script complexo, legado, estilo
>> castelo de cartas, ou que você simplesmente não tenha acesso de
>> escrita.
>>
>> O ponto aqui é que o comando dentro do script, ao invés de "cat",
>> seria algo que não suporta multiplos parametros.
>>
>> Se não der pra substituir o 'for' por algo mais elegante, não tem
>> problema, a dúvida é saber se existe algum truque na manga de alguém
>> por aí :)
>>
>> abraço!
>>
>> Breno.
>> --
>>
>> 2008/9/30 jimmy <address@hidden>:
>>
>>> se o arquivo "lista" existe use ele como argumento
>>>
>>> muda o conteúdo do mycat para:
>>> #!/bin/ksh
>>> cat $(<$1)
>>>
>>> e testa com:
>>>
>>> ./mycat lista
>>>
>>> On Tue, Sep 30, 2008 at 09:57:33AM -0300, Breno Moiana wrote:
>>>> 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]
>>>> >
>>>> >
>>>>
>>>> ------------------------------------
>>>>
>>>> ----------------------------------------------------------
>>>> 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
>>>>
>>> __________________________________________________________
>>>
>>
> 


reply via email to

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