Últimamente he tenido algunos problemas extraños con bash. Mientras intentaba simplificar mi script, se me ocurrió este pequeño fragmento de código:
$ o(){ echo | while read -r; do return 0; done; echo $?;}; o
0
$ o(){ echo | while read -r; do return 1; done; echo $?;}; o
1
returndebería haber salido de la función sin imprimir $?, ¿no? Bueno, luego verifiqué si puedo regresar solo de una tubería:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
Lo mismo sucede sin un whilebucle:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
¿Hay algo que me falta aquí? ¡Una búsqueda en Google no trajo nada sobre esto! Mi versión bash es la versión 4.2.37 (1) en Debian Wheezy.
whileno es necesario para la reproducción? Se distrae del punto.
whilebucle es un uso muy común para una tubería con return. El segundo ejemplo es más directo al punto, pero es algo que no creo que nadie pueda usar ...