Останнім часом у мене виникають дивні проблеми з басом. Намагаючись спростити свій сценарій, я придумав цей невеликий фрагмент коду:
$ o(){ echo | while read -r; do return 0; done; echo $?;}; o
0
$ o(){ echo | while read -r; do return 1; done; echo $?;}; o
1
return
мав би вийти з функції без друку $?
, чи не так? Ну, тоді я перевірив, чи можу я повернутися з труби самостійно:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
Те саме відбувається без while
циклу:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
Щось тут мені не вистачає? Пошук у Google нічого про це не приніс! Моя версія bash - 4.2.37 (1) - випуск на Debian Wheezy.
while
репродукція не потрібна? Це відволікає від точки.
while
Петля - дуже поширене використання для труби з return
. Другий приклад є більш зрозумілим, але це те, що я не вірю, що хтось коли-небудь використає ...