Hay dos maneras de leer un archivo línea por línea que quiero discutir aquí:Bash bucle while que lee archivo línea por línea
#!/bin/bash
while read line
do
echo-e "$ line \ n"
done <file.txt
y
#!/bin/bash
exec 3<file.txt
while read line
do
echo-e "$ line \ n"
done
Así primera versión funciona bien pero no entiendo el mecanismo de trabajo mientras bucle con el archivo. Pero el mecanismo de la segunda versión lo entiendo. Pero aquí no entiendo por qué se cuelga y no imprime nada.
¿El '<3' y en el trabajo de la línea' read'? Solía ser el caso, en los malos tiempos del verdadero shell de Bourne, que la redirección se haría cada vez que pasa el bucle, por lo que obtuviste efectos divertidos (como que el archivo se cierra en cada iteración). Puedo creer que ha sido modificado desde entonces para que las cosas funcionen un poco más sensatamente. * FWIW *: cuando probé 'bash' en MacOS X, con:' while read line
Gracias Jon, probé con el script anterior, funcionó en mi mac. http://cl.ly/ClDf pero esa es información útil. Lo recordaré. Todavía soy muy nuevo en bash.Acabo de aprender 'awk' y' sed'. Pero comenzará algunos libros sobre fundamentos de bash. :) –
Han editado la respuesta para tener '<& 3' después de la instrucción' done' en lugar de la instrucción 'read'. –