Descriptores de archivo de lectura / escritura de Bash: busque el inicio del archivo

Traté de usar el descriptor de archivo de lectura / escritura en bash para poder eliminar el archivo al que se refería el descriptor de archivo después, como tal:

F=$(mktemp)
exec 3<> "$F"
rm -f "$F"

echo "Hello world" >&3
cat <&3

pero elcat El comando no da salida. Puedo lograr lo que quiero si uso descriptores de archivo separados para leer y escribir:

F=$(mktemp)
exec 3> "$F"
exec 4< "$F"
rm -f "$F"

echo "Hello world" >&3
cat <&4

que imprimeHello world.

Sospeché que bash no busca automáticamente el inicio del descriptor de archivo cuando cambias de escritura a lectura, y la siguiente combinación de código bash y python confirma esto:

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()

lo que da:

$ bash fdrw.sh
12

$ # This is the prompt reappearing

¿Hay alguna manera de lograr lo que quiero simplemente usando bash?

Respuestas a la pregunta(7)

Su respuesta a la pregunta