-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Denis S. Costa wrote: > desculpem a mensagem anterior sem assunto > > tenho um programa em shell com uma sintaxe parecida com essa: > > > > while read linha; do > > echo "$linha" > > echo "" > > done < texto.txt > > > > Bom, acontece que o texto que uso as vezes não tem quebra de linha na ultima linha: > > > > oi, tudo bem? \n > > tudo e com você? \n > > bem... > > > > (as duas primeiras linha tem uma quebra de linha e a ultima não!) > > > > essa linha sem quebra de linha não entra no loop! não lida pelo while!!! por que? > > Da uma lida na estrutura de loop aqui: http://asis.epfl.ch/GNU.SYS/bash-1.14.7/features_1.html
Posto aqui duas formas para resolver, deve ter algumas mais que o pessoal certamente irá postar. Usando a estrutura do for, o IFS diz que o delimitador (split) é nada, pode setar qualquer outra coisa diferente de espaço (faça o teste removendo o IFS que você notará a diferença). Se você tivesse um arquivo demilitado por ^, então poderia usar o IFS=^, isto faria o seu read valer os campos passados, ex: read nome sobrenome, sendo que o arquivo estaria assim: nome^sobrenome. - -- IFS="" for i in $(cat texto.txt);do echo $i done - -- usando o ultil - -- FLAG=false until $FLAG;do read || FLAG=true echo $REPLY done < texto.txt - -- Um abraço - -- /*---------------------------------------------------*/ /* * Flavio Torres - Administrador de Sistemas*/ /* /_\ */int y,z;main(x){x=(x>0?-9:x);z=((z=(x+5) /* o. .o */)>0?z:-z);printf(!x&&++y?"\n":z?z>y%3+y/ /* ((Y)) */3?" ":x<-5?"/":"\\":y?"|":"*");y-9?main( /* ()) (() */++x):puts(" _|_|_")&&puts(" \\___/");} /* ()^() A party animal isn't just for Christmas.*/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.8 (MingW32) iEYEARECAAYFAkq4IwcACgkQNRQApncg295YowCg8QSKQ/hjVBoVWlcKG+6RYSDz 2f8Anj6sPg/hzbIRfn1X13PLmNdU4V/B =5aLz -----END PGP SIGNATURE-----