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?