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 diecater 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?

Antworten auf die Frage(14)

Ihre Antwort auf die Frage