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

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

Re: [shell-script] while não lê sem new_line


From: Tiago Peczenyj
Subject: Re: [shell-script] while não lê sem new_line
Date: Mon, 5 Oct 2009 20:28:03 -0300

Existem N maneiras para resolver o problema - o gostoso mesmo é
discutirmos as alternativas.

por exemplo, alterar o IFS pode ser simples nesse caso, mas como vc
esta alterando uma variavel de ambiente vc precisa tomar cuidado para
ver o que esta acontecendo, ou se acontece algum efeito colateral. sem
falar em voltar o valor de IFS para o original caso vc não esteja
fazendo isso num subshell (ou exportar para que funcione, etc).

Quem puder dar uma olhada no capitulo 2 do Mastering Unix Shell Script
pode ver 12 formas de ler de um arquivo e processa-lo linha a linha,
com seus prós e contras. alguem pode achar inutil saber tantas formas
mas entre uma e outra vc discobre, por exemplo, a diferença entre
`comando` e $(comando).

Vejam a diferença quando executamos de forma aninhada:

peczenyj@123:~$ echo `echo `echo $PATH``
echo 
/home/peczenyj/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

peczenyj@123:~$ echo $(echo $(echo $PATH))
/home/peczenyj/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Para quem não captou, tente isso:
peczenyj@123:~$ echo `echo `echo-sgadjgsadsagdjashd $PATH``

O que o Julio fez foi um truque bem util, que lembra um pouco o padrão
de integração de sistemas corporativos Pipes And Filters [
http://www.eaipatterns.com/PipesAndFilters.html ] onde a informação
que sai do sistema A (o texto original) é filtrado e o fluxo de
informação recebe um \n por um no pipe para o sistema B, que não vai
interpretar a informação do sistema A de forma correta sem que todas
as linhas tenham um \n no final. as vezes me pego fazendo um (cat
arquivo; echo) quando não quero adicionar um sed na parada.

Seria mais significavo se fosse um iconv no meio, corrigindo uma
questão de character encoding, um tr para converter maiusculas pra
minusculas, um dd para converter de ebcdic para ascii ou então um
xmllint --format - para formar um xml de forma que cada tag esteja em
uma linha - util para vc grep'ar coisas.

[ ]'s Tiago

2009/10/5 Thomaz de Oliveira dos Reis <address@hidden>
>
>
>
> Bem, pra alterar o IFS é bem simples...
>
> veja aqui: http://pastebin.ca/1595200
>
> 2009/10/5 Julio C. Neves <address@hidden>
>
> >
> >
> > Estou vendo esta discussão rolar há muito tempo, mas não acompanhei e
> > portanto não sei o que já foi tentado.
> >
> > Então não vou dar uma solução, mas uma "saída" para a solução.
> >
> > Prompt> cat arq | cat -vet
> > 1$
> > 2$
> > 3Prompt> sed '$s/$/\n/' arq | cat -vet
> > 1$
> > 2$
> > 3$
> > Prompt>
> >
> > Ou seja coloquei um <ENTER> no fim da última linha antes de processar o
> > arquivo.
> >
> > Abraços,
> > Julio
> > Cursos de Shell e Zenity em 2 fins de semana?
> > - Em SP ligue (11) 2125-4747;
> > - Em DF ligue (61) 3223-3000;
> > - No RJ ligue (21) 2561-0867;
> > - Turmas fechadas em outras cidades ligue (21) 8112-9988.



--
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br


reply via email to

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