bash: inkonsistentes Umlenkungsverhalten (keine Aufhebung) bei Schleifen

10/11/2007 - 16:23 von Hauke Laging | Report spam
Moin,

hl@server:~/tmp> echo $BASH_VERSION
3.2.25(1)-release
# OS10.3

Man kann ja Ein-Ausgabe-Umlenkungen praktischerweise auf Blöcke
beschrànken, etwa so:

while true; do echo foo; break; done > fdtest

Mein Ziel war, dafür zu sorgen, dass nur ein Prozess (die Shell
selber) auf eine Datei zugreift. Da kam mir die Idee, die
problematischen Kommandos in eine Schleife zu packen. Das Ergebnis
sah etwa so aus:

exec 3>fdtest.3
while true; do sleep 1000; break; done 3>&-

Ein flüchtiger Blick auf fuser verràt, dass die Umleitungsaufhebung
nicht durchgeführt wird.

Es kommt noch schlimmer:
while true; do sleep 1000 3>&- ; break; done
klappt.

Ist das jetzt mal ein Bug, oder welche skurrile Philosophie steht
dahinter?


CU

Hauke
http://www.hauke-laging.de/ideen/
http://www.hauke-laging.de/software/
http://zeitstempel-signatur.hauke-laging.de/
Wie können 59.054.087 Leute nur so dumm sein?
 

Lesen sie die antworten

#1 Sven Mascheck
11/11/2007 - 14:38 | Warnen spam
Hauke Laging wrote:

exec 3>fdtest.3
while true; do sleep 1000; break; done 3>&-



Woran siehst Du mit fuser, ob der Block oder
der Teil davor das Handle auf die Datei hat?

Und warum nicht einfach

exec 3>fdtest.3
echo vorher >&3
while true; do echo block >&3; break; done 3>&-
echo nachher >&3

...was dann auch in "bad file descriptor" resultieren sollte.

Ähnliche fragen