Я попытался использовать дескриптор файла для чтения / записи в 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?