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
return
sollte 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 while
Schleife:
$ 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.
while
nicht für die Reproduktion benötigt wird? Es lenkt vom Punkt ab.
while
Schleife 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 ...