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

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

Re: [shell-script] Re: Enviar músicas para o MP4.


From: Julio C. Neves
Subject: Re: [shell-script] Re: Enviar músicas para o MP4.
Date: Mon, 6 Feb 2012 16:10:43 -0200

Em 6 de fevereiro de 2012 10:08, Rodrigo Boechat <
address@hidden> escreveu:

> **
>
>
> Caraca!!!
> Eu vou ter que fazer isso para minha coleção inteira?! T_T
>
Claro que não. Um loop pode fazer isso por vc.

>  Bom. Fiz testes com as mesmas músicas que eu usei antes.
>
Mas vc fez esse teste aplicando o tr que falei ou não?

>
> Criei um script simples para testar a parte em questão:
> ================================================
> #!/bin/bash
> while read nome; do
> echo "- - - - -"
> echo "$nome"
> done <<< $(echo "$@" | sed -n "/mp3/s- /-\n/-gpi")
> ================================================
>
> O resultado foi esse:
> ================================================
> - - - - -
> .../Dream Theater - A Dramatic Turn Of Events [mp3-vbr-2011]/01 - On The
> Backs Of Angels [limpo].mp3 .../Dream Theater - A Dramatic Turn Of
> Events [mp3-vbr-2011]/02 - Build Me Up, Break Me Down [limpo].mp3
> ================================================
>
> Infelizmente ocorreu o mesmo erro.
> O correto seria ter uma linha de sequência de "menos" entre cada linha
> de mp3.
> :(
>
> Em 06-02-2012 09:24, Julio C. Neves escreveu:
> > Exatamente isso, e é por isso que nada funcionava. O seu arquivo está
> > coalhado de caracteres de controle. Primeiramente vamos limpá-lo e
> > posteriormente executar aquele cmd (que não me lembro mais), mas que te
> > mandei em msg anterior.
> >
> > Para limpá-lo, faça:
> > tr [:cntrl:] ~< arquivo_sujo | tr -s ~> arquivo_limpo
> >
> > Agora, é provável que qdo vc der um cat -vet arquivo_limpo, apareçam
> > somente as linhas com dado, terminando com um cifrão ($).
> >
> > Se for isso que acontecer, aplique o cmd que já tinha passado na msg
> > anterior e corra para o abraço. ;)
> >
> > Abcs,
> > Julio
> > *Já foi lançado "Bombando o
> > Shell<
> http://www.brasport.com.br/index.php?dispatch=products.view&product_id=666
> >
> > ". *
> > *Show **de interfaces gráficas sob Shell!*
> > *
> > *
> >
> >
> >
> > Em 4 de fevereiro de 2012 23:21, Rodrigo Boechat<
> > address@hidden> escreveu:
> >
> >> **
> >>
> >>
> >> Eu testei mandando três arquivos.
> >> Segue a resposta do comando para cada um:
> >>
> >> ID3^D^@^@^@^@q$TALB^@^@^@^Z^@^@^CA Dramatic Turn Of
> >> EventsTPE1^@^@^@^N^@^@^CDream TheaterTIT2^@^@^@^[^@^@^CBuild Me Up,
> >> Break Me DownTRCK^@^@^@^C^@^@^C02TCON^@^@^@^S^@^@^CRock /
> >> AlternativeTPUB^@^@^@^S^@^@^@Roadrunner
> >>
> RecordsTDRC^@^@^@^E^@^@^C2011APIC^@^@V^A^@^@^Cimage/jpeg^@^Cn^@M-^?M-XM-^?M-`^@^PJFIF^@^A^A^@^@^A^@^A^@^@M-^?M-~^@;CREATOR:
> >>
> >> gd-jpeg v1.0 (using IJG JPEG v62), quality = 90$
> >> M-^?M-[^@C^@^C^B^B^C^B^B^C^C^C^C^D^C^C^D^E^H^E^E^D^D^E$
> >> ^G^G^F^H^L$
> >> ^L^L^K$
> >>
> >>
> ^K^K^M^N^R^P^M^N^Q^N^K^K^P^V^P^Q^S^T^U^U^U^L^O^W^X^V^T^X^R^T^U^TM-^?M-[^@C^A^C^D^D^E^D^E^I^E^E^I^T^M^K^M^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^TM-^?M-@
> >>
> ^@^Q^H^@M-z^@M-y^C^A"^@^B^Q^A^C^Q^AM-^?M-D^@^_^@^@^A^E^A^A^A^A^A^A^@^@^@^@^@^@^@^@^A^B^C^D^E^F^G^H^I$
> >>
> >> - - - -
> >>
> >> ID3^D^@^@^@^@q^TTALB^@^@^@^Z^@^@^CA Dramatic Turn Of
> >> EventsTPE1^@^@^@^N^@^@^CDream TheaterTIT2^@^@^@^S^@^@^CLost Not
> >> ForgottenTRCK^@^@^@^C^@^@^C03TCON^@^@^@^S^@^@^CRock /
> >> AlternativeTPUB^@^@^@^S^@^@^@Roadrunner
> >>
> RecordsTDRC^@^@^@^E^@^@^C2011APIC^@^@V^A^@^@^Cimage/jpeg^@^Cn^@M-^?M-XM-^?M-`^@^PJFIF^@^A^A^@^@^A^@^A^@^@M-^?M-~^@;CREATOR:
> >>
> >> gd-jpeg v1.0 (using IJG JPEG v62), quality = 90$
> >> M-^?M-[^@C^@^C^B^B^C^B^B^C^C^C^C^D^C^C^D^E^H^E^E^D^D^E$
> >> ^G^G^F^H^L$
> >> ^L^L^K$
> >>
> >>
> ^K^K^M^N^R^P^M^N^Q^N^K^K^P^V^P^Q^S^T^U^U^U^L^O^W^X^V^T^X^R^T^U^TM-^?M-[^@C^A^C^D^D^E^D^E^I^E^E^I^T^M^K^M^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^TM-^?M-@
> >>
> ^@^Q^H^@M-z^@M-y^C^A"^@^B^Q^A^C^Q^AM-^?M-D^@^_^@^@^A^E^A^A^A^A^A^A^@^@^@^@^@^@^@^@^A^B^C^D^E^F^G^H^I$
> >>
> >> - - - -
> >>
> >> ID3^D^@^@^@^@q^\TALB^@^@^@^Z^@^@^CA Dramatic Turn Of
> >> EventsTPE1^@^@^@^N^@^@^CDream TheaterTIT2^@^@^@^W^@^@^COn The Backs Of
> >> AngelsTRCK^@^@^@^C^@^@^C01TCON^@^@^@^S^@^@^CRock /
> >> AlternativeTPUB^@^@^@^S^@^@^@Roadrunner
> >>
> RecordsTDRC^@^@^@^E^@^@^C2011APIC^@^@V^A^@^@^Cimage/jpeg^@^Cn^@M-^?M-XM-^?M-`^@^PJFIF^@^A^A^@^@^A^@^A^@^@M-^?M-~^@;CREATOR:
> >>
> >> gd-jpeg v1.0 (using IJG JPEG v62), quality = 90$
> >> M-^?M-[^@C^@^C^B^B^C^B^B^C^C^C^C^D^C^C^D^E^H^E^E^D^D^E$
> >> ^G^G^F^H^L$
> >> ^L^L^K$
> >>
> >>
> ^K^K^M^N^R^P^M^N^Q^N^K^K^P^V^P^Q^S^T^U^U^U^L^O^W^X^V^T^X^R^T^U^TM-^?M-[^@C^A^C^D^D^E^D^E^I^E^E^I^T^M^K^M^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^T^TM-^?M-@
> >>
> ^@^Q^H^@M-z^@M-y^C^A"^@^B^Q^A^C^Q^AM-^?M-D^@^_^@^@^A^E^A^A^A^A^A^A^@^@^@^@^@^@^@^@^A^B^C^D^E^F^G^H^I$
> >>
> >> - - - -
> >>
> >> Era isso que você precisava?
> >>
> >> Em 04-02-2012 22:59, Julio C. Neves escreveu:
> >>> Rodrigo,
> >>> faz o seguinte: cá um cat -vet /arquivo/que/vc/está/usando | head -5 e
> >>> posta na lista. Qdo estiver funcionando, explico.
> >>>
> >>> Abcs,
> >>> Julio
> >>> *Já foi lançado "Bombando o
> >>> Shell<
> >>
> http://www.brasport.com.br/index.php?dispatch=products.view&product_id=666
> >>> ". *
> >>> *Show **de interfaces gráficas sob Shell!*
> >>> *
> >>> *
> >>>
> >>>
> >>>
> >>> Em 4 de fevereiro de 2012 22:37, Rodrigo Boechat<
> >>> address@hidden> escreveu:
> >>>
> >>>> **
> >>>>
> >>>>
> >>>> Julio,
> >>>> Obrigado pela resposta.
> >>>> Substitui a linha pal sugeria por você, mas novamente só funcionou
> com a
> >>>> lista previamente criada em um arquivo de texto.
> >>>> Executando num subshell e jogando a resposta para o while caiu no
> mesmo
> >>>> erro; tudo na mesma linha.
> >>>> Por enquanto eu vou ficar com a lista mesmo. Já que ainda não
> encontrei
> >>>> solução para o caso.
> >>>>
> >>>> Bem. Poderia me explicar essa expressão que você usou no sed?
> >>>> Tentei entendê-la mas viajei. haha
> >>>> :)
> >>>>
> >>>> Em 03-02-2012 14:16, Julio C. Neves escreveu:
> >>>>> Rodrigo,
> >>>>> experimente substituir o sed pelo da linha abaixo:
> >>>>>
> >>>>> echo "$@" | sed -n "/mp3/s- /-\n/-gpi"
> >>>>>
> >>>>> Substituindo a barra (/) usada como separador por outro caractere (no
> >>>> caso
> >>>>> -), fica mais fácil ver.
> >>>>>
> >>>>> Por outro lado, o grep é desnecessário, já que pode-se conseguir o
> >> mesmo
> >>>>> efeito com o sed.
> >>>>>
> >>>>> Abcs,
> >>>>> Julio
> >>>>> *Já foi lançado "Bombando o Shell".
> >>>>> Show de interfaces gráficas sob Shell!*
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> Em 2 de fevereiro de 2012 22:11, Rodrigo Boechat<
> >>>>> address@hidden> escreveu:
> >>>>>> Olá, boa noite.
> >>>>>>
> >>>>>> Alguém poderia me ajudar?
> >>>>>> Quando configurei essa nova versão no Thunar, percebi que havia erro
> >> na
> >>>>>> linha 76 do script:
> >>>>>> http://pastebin.com/DLKipbzv
> >>>>>>
> >>>>>> done<<< $(echo "$*" | sed -e "s/ \//\n\//g" | grep ".mp3")
> >>>>>>
> >>>>>> Essa linha está mandando para a variável mp3 [linha 40] toda a lista
> >> de
> >>>>>> arquivos em uma linha apenas.
> >>>>>> Quando aideia é separar os caminhos dos arquivos em linhas para o
> >> while
> >>>>>> trabalhar.
> >>>>>>
> >>>>>> Estranho é que, criando um arquivo com a lista, usando a mesma
> linha:
> >>>>>> echo "$*" | sed -e "s/ \//\n\//g" | grep ".mp3"> listaDeTeste
> >>>>>>
> >>>>>> E jogando para o while o arquivo:
> >>>>>> done< listaDeTeste
> >>>>>>
> >>>>>> Funciona tudo corretamente.
> >>>>>>
> >>>>>> Não consegui entender porque o erro acontece.
> >>>>>> Tentei mas não consegui solucionar o erro.
> >>>>>>
> >>>>>> Grato!
> >>>>>>
> >>>>>> Em 24-01-2012 14:30, Rodrigo Boechat escreveu:
> >>>>>>> Fernando,
> >>>>>>> Bom dia.
> >>>>>>>
> >>>>>>> Obrigado pela sua colaboração.
> >>>>>>> Suas observações foram interessantes e me ajudou muito a mudar meu
> >>>>>>> pensamento.
> >>>>>>> Como iniciante no shellscript eu realmente não teria como adquirir
> o
> >>>>>>> conhecimento de toda a sintaxe da linguagem.
> >>>>>>>
> >>>>>>> Valeu muito suas dicas. Pensarei diferente de agora em diante. :)
> >>>>>>>
> >>>>>>> Segue a nova versão: http://pastebin.com/DLKipbzv
> >>>>>>>
> >>>>>>> Notei que a versão anterior tinha um erro feio na minha lógica,
> tinha
> >>>>>>> um "w" perdidão no meio do código que estava gerando outro erro
> >> [linha
> >>>>>>> 58 da versão anterior] e tive problemas com o ls [linha 56, versão
> >>>>>>> anterior].
> >>>>>>> Acho que consegui resolver tudo. :)
> >>>>>>>
> >>>>>>> E só explicando. Minhas férias acabaram. Por isso demorei a
> >> responder.
> >>>>>>> Abaixo eu coloquei uns comentários sobre o que você escreveu.
> >>>>>>>
> >>>>>>>
> >>>>>>> Em 29-11-2011 16:07, Fernando Mercês escreveu:
> >>>>>>>> Salve, Rodrigo, tudo bem?
> >>>>>>>>
> >>>>>>>> Vou dar uns pitacos:
> >>>>>>>>
> >>>>>>>> 1. Quando você repete muito código, é a hora de usar funções. Uma
> >> boa
> >>>>>>>> aí seria definir, no início do script, uma função de erro, por
> >>>>>>>> exemplo:
> >>>>>>>>
> >>>>>>>> err() {
> >>>>>>>> zenity --info --title "Erro!" --text "$1"
> >>>>>>>> exit 1
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>> Aí na hora de informar erro, basta fazer:
> >>>>>>>>
> >>>>>>>> err "mensagem do erro"
> >>>>>>>>
> >>>>>>>> 2. Colocar todo o seu programa dentro de um bloco de if ou else
> não
> >> é
> >>>>>>>> muito prático. Ao invés de fazer:
> >>>>>>>> ---
> >>>>>>>> if [ ! -n "$1" ]; then
> >>>>>>>> #erro
> >>>>>>>> else
> >>>>>>>> # todo seu programa
> >>>>>>>> fi
> >>>>>>>> ---
> >>>>>>>> Prefira:
> >>>>>>>> ---
> >>>>>>>> if [ ! -n "$1" ]; then
> >>>>>>>> #erro
> >>>>>>>> exit 1
> >>>>>>>> fi
> >>>>>>>>
> >>>>>>>> #todo seu programa
> >>>>>>>> ---
> >>>>>>>>
> >>>>>>>> Ou melhor, já usando a sugestão da função err():
> >>>>>>>>
> >>>>>>>> ---
> >>>>>>>> test -f "$1" || err "Falta arquivo de entrada ou não existe..."
> >>>>>>>>
> >>>>>>>> # todo o seu programa.
> >>>>>>>> --
> >>>>>>>>
> >>>>>>>> Como a função err() tem um exit, ao ser chamada, o script será
> >>>>>>>> encerrado. Perceba também que usei a opção -f do teste já neste
> >> teste
> >>>>>>>> do argumento, então você não precisaria testar novamente como faz
> na
> >>>>>>>> linha 14. ;)
> >>>>>>>>
> >>>>>>> A linha 14 testa outro arquivo que não é o mesmo do argumento de
> >>>>> entrada.
> >>>>>>> É um arquivo que "guarda" o ultimo device usado pelo MP4.
> >>>>>>> Foi uma tentativa de tentar evitar que a cada execução o script
> >>>>>>> procurasse o aparelho novamente; assim ganharia performance. No
> >>>>>>> entanto, esbarrei em um erro. De curiosidade fui inserindo e
> >> removendo
> >>>>>>> pendrives junto com o MP4 até que um pendrive pegasse o mesmo
> >>>>>>> dispositivo já usado anteriormente pelo MP4. Aí os arquivos foram
> >>>>>>> copiado no pendrive, não para o MP4.
> >>>>>>> Pela minha lógica, eu sabia que isso poderia acontecer. só forcei a
> >>>>>>> situação para obter a comprovação.
> >>>>>>>
> >>>>>>> Por esse motivo removi essa parte e voltei a fazer com que o script
> >>>>>>> procure, em cada execução, o ponto de montagem do MP4.
> >>>>>>>
> >>>>>>>> 3. Você checa se o arquivo foi passado na linha de comando, mas
> >> dentro
> >>>>>>>> do script você fixou o arquivo (linha 12), é isso mesmo? Se sua
> >> ideia
> >>>>>>>> era fazer uma lógica do tipo "se o usuário informar um arquivo,
> usa,
> >>>>>>>> do contrário, usa o padrão
> >>>>>>>> /home/$USER/.enviarParaMP4-pontoDeMontagem", melhor fazer assim:
> >>>>>>>>
> >>>>>>>> arquivo="$HOME/.enviarParaMP4-pontoDeMontagem"
> >>>>>>>> test -f "$1"&& arquivo=$1 || echo "Aviso: usando arquivo padrão
> >>>>>>>> $arquivo"
> >>>>>>>>
> >>>>>>>> O que vem depois do&& só é executado se o test retornar sucesso. O
> >>>>>>>> que vem depois do || só é executado se o test falhar.
> >>>>>>>>
> >>>>>>>> Acho que se você pensar nestes três itens e aplicar em todo o
> >> código,
> >>>>>>>> terá um script muito menor. ;)
> >>>>>>>>
> >>>>>>> Bom, justamente a explicação anterior fala sobre o arquivo
> >>>>>>> ".enviarParaMP4-pontoDeMontagem".
> >>>>>>> O caso da linha 14.
> >>>>>>>
> >>>>>>> Eu queria evitar a execução de parte do código se o MP4 já
> estivesse
> >>>>>>> montado. Mas como disse houve o erro já explicado.
> >>>>>>> Até agora eu não consegui enxergar uma maneira de fazer isso,
> >> evitando
> >>>>>>> o possível problema, pois para evitar o problema o eu teria que
> fazer
> >>>>>>> toda a checagem novamente. O que tornaria o código redundante.
> >>>>>>> Para que eu evitar de executar um código, sendo que para evitar
> erros
> >>>>>>> eu tenho que executá-lo? ^_^"
> >>>>>>>
> >>>>>>> Opa, me ocorreu uma ideia. Acho que posso verificar o serial direto
> >>>>>>> pelo ponto de montagem. Se for possível até valeria a pena executar
> >>>>>>> uma linha para verificar se o ponto de montagem se refere ao mesmo
> >>>>>>> serial contido na variável "$dispositivoSerial".
> >>>>>>>
> >>>>>>> *** É pesquisei um bocado. Não consegui encontrar nada que pudesse
> >>>>>>> fazer isso sem fazer os passos já feitos para conseguir o ponto de
> >>>>>>> montagem. Se alguém souber como se faz e puder contribuir,
> agradeço.
> >>>>>>> :)
> >>>>>>>
> >>>>>>>> Grande abraço e boa sorte!
> >>>>>>>>
> >>>>>>> Obrigado. O script final realmente ficou muito menor e mais limpo.
> >>>>>>> Gostei do resultado.
> >>>>>>>
> >>>>>>> Quem tiver o Thunar ou a paciência de executá-lo na linha de
> comando,
> >>>>>>> por favor me retornem os resultados. Até agora não encontrei erros.
> >>>>>>>
> >>>>>>> Obrigado lista pelas ajudas!
> >>>>>>> E se tiverem mais ideias para melhorar o script ou incrementar, me
> >>>>> avisem!
> >>>>>>> Rodrigo Boechat
> >>>>>>>> Att,
> >>>>>>>>
> >>>>>>>> Fernando Mercês
> >>>>>>>> Linux Registered User #432779
> >>>>>>>> www.mentebinaria.com.br
> >>>>>>>> softwarelivre-rj.org
> >>>>>>>> @MenteBinaria
> >>>>>>>> ------------------------------------
> >>>>>>>> Participe do I Hack'n Rio
> >>>>>>>> hacknrio.org
> >>>>>>>> ------------------------------------
> >>>>>>>>
> >>>>>>>> 2011/11/26 Rodrigo Boechat<address@hidden
> >>>>>>>> <mailto:rodrigo.boechat.tenorio%40gmail.com>>
> >>>>>>>>> Acho que finalizei o script.
> >>>>>>>>> A nova nova nova versão está no pasteBin:
> >>>>>>>>> http://pastebin.com/XMYX6bAR
> >>>>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - -
> >>>>> - -
> >>>>>>>>> - - - -
> >>>>>>>>>
> >>>>>>>>> MrBits,
> >>>>>>>>> Implementei a contagem de arquivos.
> >>>>>>>>> Creio estar funcionando corretamente. hehe
> >>>>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - -
> >>>>>>>> - - - -
> >>>>>>>>> Alysson,
> >>>>>>>>> Alterei conforme sua observação.
> >>>>>>>>> Obrigado.
> >>>>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - -
> >>>>>>>> - - - -
> >>>>>>>>> Pessoal,
> >>>>>>>>>
> >>>>>>>>> Enquanto eu estava fuçando no script esbarrei com uma
> curiosidade.
> >>>>>>>>> Fiz o exemplo a baixo para demonstrar o que me aconteceu
> [Coloquei
> >>>>>>>>> "underscore" no lugar de espaços dentro do echo por causa do
> >>>>>>>> formato html]:
> >>>>>>>>> echo "campo/1_campo/2__campo/3___campo/4____campo/5" | sed -e
> >>>>>>>>> "s/\([a-z0-9/]* *\)\{4\}[0-9a-zA-Z/ ]*/\1\##/"
> >>>>>>>>>
> >>>>>>>>> Sem querer, esse comando de SED que eu fiz, retornou exatamente:
> >>>>>>>>> "campo/4____"
> >>>>>>>>> !!!!!!
> >>>>>>>>> Depois foi só adicionar na linha de sed o "; s/ *//g" e obtive:
> >>>>>>>>> "campo/4"
> >>>>>>>>>
> >>>>>>>>> O interessante é que eu esperava que o retorno fosse o seguinte:
> >>>>>>>>> "campo/1_campo/2__campo/3___campo/4____"
> >>>>>>>>>
> >>>>>>>>> Já que eu tive esse retorno inesperado da regex aproveitei e
> >>>>> substituí
> >>>>>>>>> uns AWK's, deixando umas linhas menores.
> >>>>>>>>> Mas o fato é que eu fiquei sem entender o porque disso ter
> >>>>> acontecido.
> >>>>>>>>> Alguém consegue compreender o porque? Como eu faria para obter o
> >>>>>>>> retorno
> >>>>>>>>> esperado?
> >>>>>>>>> Já bati um bocado de cabeça e não cheguei na solução. Agora está
> >> mais
> >>>>>>>>> como curiosidade que como necessidade, mesmo.
> >>>>>>>>>
> >>>>>>>>> Obrigado por toda a ajuda.
> >>>>>>>>> :)
> >>>>>>>>>
> >>>>>>>>> <http://pastebin.com/XMYX6bAR>
> >>>>>>>>>
> >>>>>>>>> Em 17-11-2011 09:22, Alysson Gonçalves de Azevedo escreveu:
> >>>>>>>>>
> >>>>>>>>>> Vi que dentro do while, vc ta rodando o df a todo momento...
> >>>>>>>>>> Eu sei que o df é rapinho... mas só por sugestão... não seria
> >>>>>>>> melhor pegar
> >>>>>>>>>> o tamanho do dispositivo apenas 1 vez e depois subtrair do
> espaço
> >>>>>>>> livre o
> >>>>>>>>>> tamanho de cada musica?
> >>>>>>>>>>
> >>>>>>>>>> Saudações...
> >>>>>>>>>>
> >>>>>>>>>> Alysson Gonçalves de Azevedo
> >>>>>>>>>> (11) 8491-7730
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Em 17 de novembro de 2011 03:25, Rodrigo Boechat<
> >>>>>>>>>> address@hidden
> >>>>>>>> <mailto:rodrigo.boechat.tenorio%40gmail.com>> escreveu:
> >>>>>>>>>>> **
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Realmente interessante.
> >>>>>>>>>>> Eu mesmo pensei em perguntar, mas o Tiago foi o fez na minha
> >>>>> frente.
> >>>>>>>>>>> :)
> >>>>>>>>>>>
> >>>>>>>>>>> Bem aqui segue a nova versão da bagaça:
> >>>>>>>>>>> http://pastebin.com/XMYX6bAR
> >>>>>>>>>>> Se alguém enxergar como melhorar qualquer coisa, me avisa!
> >>>>>>>>>>>
> >>>>>>>>>>> Tiago,
> >>>>>>>>>>> Tentei implementar o esquema da verificação do tamanho do
> >> arquivo.
> >>>>>>>>>>> Acredito estar funcionando. Mas ainda carece de testes.
> >>>>>>>>>>>
> >>>>>>>>>>> Como eu optei por verificar o tamanho do arquivo para reservar
> >>>>>>>> os 100KB,
> >>>>>>>>>>> pros arquivos de configurações do aparelho, não mexi com o
> >>>>>>>> tratamento de
> >>>>>>>>>>> erro sobre o cp.
> >>>>>>>>>>>
> >>>>>>>>>>> Ainda estou vendo uma maneira de limitar a quantidade de
> arquivos
> >>>>> no
> >>>>>>>>>>> diretório para 999, que é o que o aparelho suporta.
> >>>>>>>>>>> Logo mando novas a respeito disso. Talvez um:
> >>>>>>>>>>> ls | grep ".mp3" | wc -l
> >>>>>>>>>>> resolva meu caso. Eu que não tive tempo de implementar ainda.
> >>>>>>>>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
> >>>>>>>>>>>
> >>>>>>>>>>> MrBits,
> >>>>>>>>>>> Obrigado pela ajuda e pela dica do /proc...
> >>>>>>>>>>> Também pelo sed -e 's/^.*\[//g ; s/\].*$//g'
> >>>>>>>>>>> Essa abordagem de separar o que eu realmente precisava ficou
> >>>>>>>> muito mais
> >>>>>>>>>>> fácil e conveniente que meu:
> >>>>>>>>>>>
> >>>>>>>>>>> sed -e "s/^.\{28\}\([a-z]\{3\}\).*/\1/"
> >>>>>>>>>>>
> >>>>>>>>>>> E não consegui evitar os subshells, infelizmente.
> >>>>>>>>>>> Quebrei cabeça, pesquisei e descobri que, para os processos
> >>>>>>>> necessários
> >>>>>>>>>>> envolvidos, não há escapatória.
> >>>>>>>>>>> Ou eu esqueci de alguma coisa?
> >>>>>>>>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
> >>>>>>>>>>>
> >>>>>>>>>>> Julio,
> >>>>>>>>>>> Obrigado pelas dicas. Também suas explicações foram
> >>>>> esclarecedoras.
> >>>>>>>>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
> >>>>>>>>>>>
> >>>>>>>>>>> Abraço a todos!
> >>>>>>>>>>> Rodrigo Boechat
> >>>>>>>>>>>
> >>>>>>>>>>> Em 16-11-2011 14:53, Julio C. Neves escreveu:
> >>>>>>>>>>>
> >>>>>>>>>>>> Fala Pacman,
> >>>>>>>>>>>> isso vem desde a época do UNIX. Suponha que vc faça um find
> >>>>> assim:
> >>>>>>>>>>>> find . -name arq\? -exec grep -l palavra {} \;
> >>>>>>>>>>>>
> >>>>>>>>>>>> e supondo que esse find encontrasse arq1, arq2 e arq3, a linha
> >>>>>>>> montada
> >>>>>>>>>>> pelo
> >>>>>>>>>>>> exec para execução seria:
> >>>>>>>>>>>> rm arq1 ; rm arq2 ; rm arq3
> >>>>>>>>>>>>
> >>>>>>>>>>>> Usando \+, esta linha ficaria:
> >>>>>>>>>>>> rm arq1 arq2 rm arq3
> >>>>>>>>>>>>
> >>>>>>>>>>>> Daí ser muito mais rápido.
> >>>>>>>>>>>> Abcs,
> >>>>>>>>>>>> Julio
> >>>>>>>>>>>> *Quer aprender tudo de Shell em 2 fins de semana?*
> >>>>>>>>>>>> * address@hidden
> >>>>>>>> <mailto:julio.neves%40gmail.com><address@hidden
> >>>>>>>> <mailto:julio.neves%40gmail.com>> ou (21) 8112-9988*
> >>>>>>>>>>>> **
> >>>>>>>>>>>> *** » **julioneves1 » juliobash*
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Em 16 de novembro de 2011 13:58, Tiago Peczenyj
> >>>>>>>>>>>> <address@hidden
> >>>>>>>> <mailto:tiago.peczenyj%40gmail.com>>escreveu:
> >>>>>>>>>>>>> **
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> puxa julio eu nao conhecia o \+
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> vi rapidamente no man find, por acaso o seu livro aborda esta
> >>>>>>>>>>>>> construção? confesso que para mim é novidade.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 2011/11/16 Julio C. Neves<address@hidden
> >>>>>>>> <mailto:julio.neves%40gmail.com>>:
> >>>>>>>>>>>>>> Só para otimizar I/O. Use o mesmo conceito no resto. Troque
> >>>>>>>> as linhas:
> >>>>>>>>>>>>>> find "/proc/scsi/usb-storage/" -type f -exec grep -l
> >>>>>>>>>>>>>> "$dispositivoSerial" {} \; | awk -F '/' '{print "sd "$5}' |
> >>>>>>>> tail -n1>
> >>>>>>>>>>>>>> $dispositivoArquivo
> >>>>>>>>>>>>>> read dispositivo< $dispositivoArquivo
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> por:
> >>>>>>>>>>>>>> read dispositivo<<< $(find /proc/scsi/usb-storage/ -type f
> >>>>>>>> -exec grep
> >>>>>>>>>>>>>> -l "$dispositivoSerial"
> >>>>>>>>>>>>>> {} \+ | awk -F '/' '{print "sd "$5}' | tail -n1)
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Será gerado um subshell para executar o find, mas será mais
> >>>>>>>> rápido por
> >>>>>>>>>>>>> não
> >>>>>>>>>>>>>> fazer I/O. Repare tb que troquei o \; do exec por \+ para
> ser
> >>>>>>>> mais
> >>>>>>>>>>>>> rápido.
> >>>>>>>>>>>>>> Abcs,
> >>>>>>>>>>>>>> Julio
> >>>>>>>>>>>>>> *Quer aprender tudo de Shell em 2 fins de semana?*
> >>>>>>>>>>>>>> * address@hidden
> >>>>>>>> <mailto:julio.neves%40gmail.com><address@hidden
> >>>>>>>> <mailto:julio.neves%40gmail.com>> ou (21) 8112-9988*
> >>>>>>>>>>>>>> **
> >>>>>>>>>>>>>> *** » **julioneves1 » juliobash*
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Em 15 de novembro de 2011 19:05, Rodrigo Boechat<
> >>>>>>>>>>>>>> address@hidden
> >>>>>>>> <mailto:rodrigo.boechat.tenorio%40gmail.com>> escreveu:
> >>>>>>>>>>>>>>> **
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Tiago,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> A sua ideia de abordagem para a questão do espaço foi
> >>>>>>>> interessante.
> >>>>>>>>>>>>>>> Realmente esqueci que existe a saída de erro... T_T"
> >>>>>>>>>>>>>>> O fato é que nunca mexi com isso. Vou pesquisar.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Também suas observações foram bem feitas. O meu MP4
> >>>>>>>> shing-ling suporta
> >>>>>>>>>>>>>>> 999 MPtrêzes.
> >>>>>>>>>>>>>>> Ok. Eu perguntaria como eu colocaria 999 músicas de
> >>>>>>>> qualidade "padrão"
> >>>>>>>>>>>>>>> num espaço de 2GB... mas isso não vem ao caso.
> >>>>>>>>>>>>>>> Hehehe
> >>>>>>>>>>>>>>> E, novamente, sim. Estive olhando o MP4. Ele salva suas
> >>>>>>>> configurações
> >>>>>>>>>>> de
> >>>>>>>>>>>>>>> maneira confusa em vários arquivinhos de texto.
> >>>>>>>>>>>>>>> Então seria interessante reservar uns 100KB para o próprio
> >>>>>>>> aparelho.
> >>>>>>>>>>>>>>> Estudarei como implementar suas ideias em breve.
> >>>>>>>>>>>>>>> Por enquanto, obrigado. Assim que eu tiver alguma novidade
> a
> >>>>>>>> esse
> >>>>>>>>>>>>>>> respeito eu mostro || echo "Ou mando dúvidas".
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> ----------------------------------------
> >>>>>>>>>>>>>>> MrBits,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Rapaz, eu fis muita pesquisa para saber como encontrar o
> >>>>>>>> raio do ponto
> >>>>>>>>>>>>>>> de montagem.
> >>>>>>>>>>>>>>> Nunca eu ia imaginar que esse caminho do proc/scsi pudesse
> >>>>>>>> existir. :)
> >>>>>>>>>>>>>>> Porque em todas as explicações que eu achei, nada falou a
> >>>>>>>> respeito.
> >>>>>>>>>>>>>>> Bom. Da forma abaixo, consegui fazer o processo sem usar
> >>>>>>>> subshell.
> >>>>>>>>>>>>>>> Em contra partida, criou-se um tráfego maior de IO.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> dispositivoArquivo="/home/$USER/.enviarParaMP4-dispositivo"
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> find "/proc/scsi/usb-storage/" -type f -exec grep -l
> >>>>>>>>>>>>>>> "$dispositivoSerial" {} \; | awk -F '/' '{print "sd "$5}' |
> >>>>>>>> tail -n1>
> >>>>>>>>>>>>>>> $dispositivoArquivo
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> read dispositivo< $dispositivoArquivo
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> dmesg | grep -e "$dispositivo.*\[.*Attached" | sed -e
> >>>>>>>> 's/^.*\[//g ;
> >>>>>>>>>>>>>>> s/\].*$//g' | tail -n1> $dispositivoArquivo
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> read dispositivo< $dispositivoArquivo
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> mount | grep -i "$dispositivo" | awk '{print $3}'>
> >>>>>>>> $dispositivoArquivo
> >>>>>>>>>>>>>>> read dispositivo< $dispositivoArquivo
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> rm "$dispositivoArquivo"
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> A questão, é: O que mais vale a pena?
> >>>>>>>>>>>>>>> Voltando aos primórdios da época da faculdade, lembro que
> IO
> >>>>>>>> é sempre
> >>>>>>>>>>>>>>> mais lento que processamento na memória.
> >>>>>>>>>>>>>>> Mas como eu sou novo na área, realmente gostaria de saber
> se
> >>>>>>>> o caso é
> >>>>>>>>>>>>>>> válido. Pois o shell trabalha "suave" com arquivos de
> texto.
> >>>>>>>> E seu eu
> >>>>>>>>>>>>>>> jogasse esses arquivos para uma "tmpfs" ao invés do home?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Grato pela ajuda,
> >>>>>>>>>>>>>>> Rodrigo Boechat
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Em 15-11-2011 09:33, MrBiTs escreveu:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> -----BEGIN PGP SIGNED MESSAGE-----
> >>>>>>>>>>>>>>>> Hash: SHA256
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On 11/15/2011 01:51 AM, Rodrigo Boechat wrote:
> >>>>>>>>>>>>>>>>> MrBiTs, obrigado pela ajuda!
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Estou implementando, seguindo sua dica. O problema é que,
> >>>>>>>> olhando
> >>>>>>>>>>>>>>>> meu script percebi que há muita subshell. Tentei, mas
> ainda
> >>>>>>>>>>>>>>>>> não consegui enxergar uma maneira de evitá-las.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Tentei usar o esquema:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> variavel=comandos ${variavel}
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Mas não deu certo. E vom o eval eu ainda continuo no
> >>>>>>>> problema de
> >>>>>>>>>>>>>>>> subshell.
> >>>>>>>>>>>>>>>>> Aqui o ${!variavel} sempre retorna vazio.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Existe uma maneira de melhorar a coisa?
> >>>>>>>>>>>>>>>> Quando eu tenho tarefas repetitivas de geração de dados,
> eu
> >>>>>>>>>>> geralmente
> >>>>>>>>>>>>>>>> as executo uma única vez, direcionando sua saída para uma
> >>>>>>>>>>>>>>>> espécie de arquivo de configuração. Posso exemplificar
> isso
> >>>>>>>> numa
> >>>>>>>>>>>>>>>> leitura de arquivos que contenham um dado de código de
> >>>>> qualquer
> >>>>>>>>>>>>>>>> coisa, cuja descrição está numa tabela de banco de dados.
> >>>>>>>> Ao invés de
> >>>>>>>>>>>>>>>> ler a tabela para cada linha, eu a leio uma única vez e
> jogo
> >>>>>>>>>>>>>>>> sua saída num arquivo no formato chave-valor. Como o bash
> 4
> >>>>>>>> suporta
> >>>>>>>>>>>>>>>> nativamete arrays associativos, via declare -A, fica fácil
> >>>>>>>>>>>>>>>> você construir a relação. A versão 3 do bash não possui
> isso
> >>>>>>>>>>>>>>>> nativamente, então o ideal é fazer upgrade. Eu
> >>>>>>>> particularmente acho
> >>>>>>>>>>>>>>>> eval a praga do shell-script. Se é para usar eval e deixar
> >>>>>>>> o script
> >>>>>>>>>>>>>>>> ininteligível, é mais fácil partir para outra linguagem.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Não me parece, entretanto, ser o caminho, já que você vai
> >>>>>>>> querer
> >>>>>>>>>>>>>>>> plugar seu emepêquatlo (outro dia me falaram em MP-6,
> porque
> >>>>>>>>>>>>>>>> tocava música, filme, tirava fotos, mostrava fotos, tinha
> >>>>>>>> rádio AM-FM
> >>>>>>>>>>>>>>>> e jogos, subvertendo a abreviação do formato mpeg layer 4,
> >>>>>>>>>>>>>>>> usando isso para indicar quantas funções o aloz flito
> tinha)
> >>>>> a
> >>>>>>>>>>>>>>>> qualquer momento e ele poderá usar um dispositivo
> >>>>>>>> diferente. Se não
> >>>>>>>>>>>>>>>> fosse assim, minha recomendação seria que você gerasse um
> >>>>>>>> arquivo de
> >>>>>>>>>>>>>>>> parâmetros quando o computador iniciasse.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Claro que usar subshell não é crime. Tudo são ferramentas.
> >>>>>>>> Numa hora,
> >>>>>>>>>>>>>>>> uma subshell é ruim, como no caso que analisamos da
> >>>>>>>>>>>>>>>> velocidade do script, mas tem horas que somente subshells
> >> vão
> >>>>>>>>>>>>> resolver.
> >>>>>>>>>>>>>>>> Um trecho que me chamou a atenção foi esse:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> dmesg | grep -i "$numeroDoDispositivo" | grep -i
> >>>>>>>> "$nome2MP4" | sed -e
> >>>>>>>>>>>>>>>> "s/^.\{28\}\([a-z]\{3\}\).*/\1/" | tail -n1>"$dispositivo"
> >>>>>>>>>>>>>>>> pontoDeMontagem=$(mount | grep -i "`cat
> >>>>>>>> /home/$USER/.dispositivo`" |
> >>>>>>>>>>>>>>>> sed -e "s/^.\{12\}\([0-9a-zA-Z/ -]*\) type.*/\1/")
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Primeiro você gera uma string dados do dispositivo, só
> para
> >>>>>>>> filtrar o
> >>>>>>>>>>>>>>>> mount com esse dado. Aí pensei em juntar tudo numa coisa
> só:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> pontoDeMontagem=$(mount | \
> >>>>>>>>>>>>>>>> grep -i \
> >>>>>>>>>>>>>>>> $(dmesg | \
> >>>>>>>>>>>>>>>> grep -i "$numeroDoDispositivo" | \
> >>>>>>>>>>>>>>>> grep -i "$nome2MP4" | \
> >>>>>>>>>>>>>>>> sed -e "s/^.\{28\}\([a-z]\{3\}\).*/\1/" | \
> >>>>>>>>>>>>>>>> tail -n1) | \
> >>>>>>>>>>>>>>>> sed -e "s/^.\{12\}\([0-9a-zA-Z/ -]*\) type.*/\1/")
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Na minha opinião, ficou confuso demais e não reduz a
> >>>>>>>> quantidade de
> >>>>>>>>>>>>>>>> subshells. Separei os comandos em linhas, para termos
> melhor
> >>>>>>>>>>>>>>>> visibilidade.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Linux tem algumas ferramentas legais para você analisar o
> >>>>>>>> que está
> >>>>>>>>>>>>>>>> rodando ou instalado na sua máquina. Por exemplo, você
> >>>>> procura
> >>>>>>>>>>>>>>>> o número do dispositivo assim:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> numeroDoDispositivo=$(dmesg | grep -i "$nome1MP4" | sed -e
> >>>>>>>>>>>>>>>> "s/^.\{20\}\([0-9:]\{8\}\).*/\1/" | tail -n1)
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Entretanto, você tem os sysfs e procfs que te ajudam
> muito.
> >>>>>>>> Veja que
> >>>>>>>>>>>>>>>> legal:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> $ ls /proc/scsi/usb-storage
> >>>>>>>>>>>>>>>> 6
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Esse 6 é exatamente o número do dispositivo USB que eu
> >>>>>>>> tenho plugado
> >>>>>>>>>>>>>>>> no meu computador agora. Obviamente, ele por sí só não diz
> >>>>>>>>>>>>>>>> muita coisa, mas se for o único arquivo do diretório,
> >>>>>>>> pronto, você já
> >>>>>>>>>>>>>>>> eliminou um monte de subshell. Dentro do arquivo temos:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Host scsi6: usb-storage
> >>>>>>>>>>>>>>>> Vendor: Kingston
> >>>>>>>>>>>>>>>> Product: DT 101 G2
> >>>>>>>>>>>>>>>> Serial Number: 001CC07CEB39BB41891A0087
> >>>>>>>>>>>>>>>> Protocol: Transparent SCSI
> >>>>>>>>>>>>>>>> Transport: Bulk
> >>>>>>>>>>>>>>>> Quirks:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Então, talvez um find /proc/scsi/usb-storage -type f -exec
> >>>>>>>> grep -l
> >>>>>>>>>>>>>>>> $nome1MP4 {}\; seja a forma de você achar o número do
> >>>>>>>>>>>>>>>> dispositivo. O arquivo /proc/scsi/scsi também te dá
> >>>>> informações
> >>>>>>>>>>>>>>>> interessantes, mas ainda não me diz se ele está montado.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Aí, para descobrir qual é o ponto de montagem do safado, e
> >>>>>>>> aí vamos
> >>>>>>>>>>> ao
> >>>>>>>>>>>>>>>> dmesg. Ele sempre escreve algo como sd #Device, então se
> eu
> >>>>>>>>>>>>>>>> filtrá-lo por sd 6, devo ter algo legal:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> dmesg | grep -e "sd 6.*\[.*$nome2MP4"
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Ele vai me retornar alguma coisa assim:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> [57713.679823] sd 6:0:0:0: [sdb] Attached SCSI removable
> >> disk
> >>>>>>>>>>>>>>>> Aí, como o sdb é o que queremos, talvez um dmesg | grep -e
> >>>>> "sd
> >>>>>>>>>>>>>>>> 6.*\[.*Attached" | sed -e 's/^.*\[//g ; s/\].*$//g' seja
> >>>>> legal.
> >>>>>>>>>>>>>>>> Como sabemos que todo dispositivo USB será montado em um
> >>>>> device
> >>>>>>>>>>>>>>>> diferente, se plugarmos o primeiro, temos /dev/sdb, se
> >>>>>>>> plugarmos o
> >>>>>>>>>>>>>>>> segundo, temos /dev/sdc, isso nos basta. Aí é só ver no
> >> mount
> >>>>>>>>>>>>>>>> mount | grep -i sdb
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> E viva.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Veja se diminui um pouco seus subshells.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> - --
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> LLAP
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> .0. MrBiTs - address@hidden
> >>>>>>>> <mailto:mrbits.dcf%40gmail.com><mailto:mrbits.dcf%40gmail.com>
> >>>>>>>>>>>>>>>> ..0 GnuPG -
> >>>>>>>>>>>>>>>>
> >>
> http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
> >>>>>>>> <
> >>
> http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
> >>>>>>>>>>>>>>>> <
> >>
> http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
> >>>>>>>> <
> >>
> http://keyserver.fug.com.br:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
> >>>>>>>>>>>>>>>> 000 http://www.mrbits.com.br
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> -----BEGIN PGP SIGNATURE-----
> >>>>>>>>>>>>>>>> Version: GnuPG v1.4.11 (GNU/Linux)
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>> iQEcBAEBCAAGBQJOwk4AAAoJEG7IGPwrPKWr2TEH/ilB3vvv3mDQAuoHF2H3pgsB
> >>>>>>>> zsfkOtZEeSExlnsOW35XgvHgB8h7wsIY7MeDaEoMAPY3PH+1eGzCEN9H8sopEpfG
> >>>>>>>> D60TisBQOi4RkHJ2HvoHJPEo/Uxl3MGvyXQst2Ds50XmlmheMY6lj9+N0Fw8PQWP
> >>>>>>>> /JZ/hL83s2FyoXLd2JtA7Bt9mPAbcEWeQuUcslhw+lzLc678P0rnmV9kAoDaSs9F
> >>>>>>>> v9G/8dKELwsJ+DbweBUlJVYTnfSGkQBzegHdFA5OhJ8cC6DO7kiiXAZC+n0tJUQB
> >>>>>>>> yhArU6iRFR3DPE1Acpe4SBrpbci7dwtP4JNNur+ScPE/fSoNtETsJU2Pz5E1Awk=
> >>>>>>>>>>>>>>>> =3AEc
> >>>>>>>>>>>>>>>> -----END PGP SIGNATURE-----
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> [As partes desta mensagem que não continham texto foram
> >>>>>>>> removidas]
> >>>>>>>>>>>>>> [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
> >>>>>>>> <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> >>>>>>>>>>>>>> ----------------------------------------------------------
> >>>>>>>>>>>>>> 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
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>> --
> >>>>>>>>>>>>> Tiago B. Peczenyj
> >>>>>>>>>>>>> Linux User #405772
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> http://pacman.blog.br
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>> [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
> >>>>>>>> <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> >>>>>>>>>>>> ----------------------------------------------------------
> >>>>>>>>>>>> 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]
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>> [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
> >>>>>>>> <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> >>>>>>>>>> ----------------------------------------------------------
> >>>>>>>>>> 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]
> >>>>>>>>>
> >>>>>>>>>
> >>>>>> [As partes desta mensagem que não continham texto foram removidas]
> >>>>>>
> >>>>>>
> >>>>> [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]
> >>>>
> >>>>
> >>>>
> >>> [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]
> >>
> >>
> >>
> >
> > [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]
>
>  
>


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



reply via email to

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