我试图在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就可以实现我想要的功能的方法?