Bash Lese / Schreibe Dateideskriptoren - suche den Dateianfang
Ich habe versucht, den Lese- / Schreib-Dateideskriptor in bash zu verwenden, damit ich die Datei löschen kann, auf die der Dateideskriptor anschließend verweist.
F=$(mktemp)
exec 3<> "$F"
rm -f "$F"
echo "Hello world" >&3
cat <&3
aber diecat
er Befehl @ gibt keine Ausgabe aus. Ich kann erreichen, was ich will, wenn ich separate Dateideskriptoren zum Lesen und Schreiben verwende:
F=$(mktemp)
exec 3> "$F"
exec 4< "$F"
rm -f "$F"
echo "Hello world" >&3
cat <&4
was drucktHello world
.
Ich habe vermutet, dass bash nicht automatisch nach dem Anfang des Dateideskriptors sucht, wenn Sie vom Schreiben zum Lesen wechseln, und die folgende Kombination aus bash und Python-Code bestätigt dies:
fdrw.sh
exec 3<> tmp
rm tmp
echo "Hello world" >&3
exec python fdrw.py
fdrw.py
import os
f = os.fdopen(3)
print f.tell()
print f.read()
was gibt:
$ bash fdrw.sh
12
$ # This is the prompt reappearing
Gibt es eine Möglichkeit, mit bash das zu erreichen, was ich will?