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: Rodrigo Boechat
Subject: Re: [shell-script] Re: Enviar músicas para o MP4.
Date: Sat, 04 Feb 2012 23:21:22 -0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:9.0) Gecko/20111224 Thunderbird/9.0.1

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]



reply via email to

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