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?

Ответы на вопрос(7)

Ваш ответ на вопрос