Ich habe in letzter Zeit einige seltsame Probleme mit Bash. Während ich versuchte, mein Skript zu vereinfachen, kam ich auf dieses kleine Stück Code:
$ o(){ echo | while read -r; do return 0; done; echo $?;}; o
0
$ o(){ echo | while read -r; do return 1; done; echo $?;}; o
1
returnsollte die Funktion verlassen haben, ohne zu drucken $?, nicht wahr? Nun, dann habe ich geprüft, ob ich alleine von einer Pipe zurückkehren kann:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
Das gleiche passiert ohne whileSchleife:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
Fehlt mir hier etwas? Eine Google-Suche hat dazu nichts gebracht! Meine Bash-Version ist 4.2.37 (1) -Release auf Debian Wheezy.
whilenicht für die Reproduktion benötigt wird? Es lenkt vom Punkt ab.
whileSchleife ist eine sehr häufige Verwendung für eine Pipe mit return. Das zweite Beispiel ist direkter, aber es ist etwas, von dem ich nicht glaube, dass es jemals jemand verwenden würde ...