Bash чтение / запись файловых дескрипторов - поиск начала файла
Я попытался использовать дескриптор файла для чтения / записи в bash, чтобы я мог удалить файл, на который дескриптор файла ссылался впоследствии, как таковой:
F=$(mktemp)
exec 3<> "$F"
rm -f "$F"
echo "Hello world" >&3
cat <&3
ноcat
Команда не дает вывода. Я могу достичь того, чего хочу, если я использую отдельные файловые дескрипторы для чтения и записи:
F=$(mktemp)
exec 3> "$F"
exec 4< "$F"
rm -f "$F"
echo "Hello world" >&3
cat <&4
какие отпечаткиHello world
.
Я подозревал, что bash не автоматически ищет начало дескриптора файла, когда вы переключаетесь с записи на чтение, и следующая комбинация кода bash и python подтверждает это:
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()
который дает:
$ bash fdrw.sh
12
$ # This is the prompt reappearing
Есть ли способ добиться того, чего я хочу, просто используя bash?