一尘不染

Bash读取/写入文件描述符-寻求文件的开始

linux

我试图在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来实现我想要的功能?


阅读 263

收藏
2020-06-07

共1个答案

一尘不染

不,bash的重定向没有任何“寻求”的概念。它以长流从头到尾进行读取/写入(大部分)。

2020-06-07