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 09:24:06 -0200

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]



reply via email to

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