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

12
задан telotortium 1 October 2010 в 10:23
поделиться