我希望能够将数据写入文件描述符,然后稍后在 bash 中将其读回。
这看起来像:
# some line to create LOOPBACK_FD
echo foo >${LOOPBACK_FD}
cat <${LOOPBACK_FD}
# foo is printed
我知道我可以使用变量来存储命令的输出,例如:
MYMESSAGE=$(echo foo)
echo ${MYMESSAGE}
memfd_create
做了我想要的事情,但文件偏移量可能存在问题,而且似乎 bash 甚至没有使用它。
也许有一种特殊的设备可以做到这一点?
编辑:我正在寻找一种不需要在文件系统中创建新节点的解决方案。
这将不起作用——无论它
LOOPBACK_FD
是如何创建或打开的,或者它是否可以通过文件系统访问。cat
只要调用脚本(正在等待cat
终止)将保持管道的写入端打开,它将继续等待不会出现的 EOF。一些可能适用于简单示例的东西(但会遇到死锁和缓冲任何不平凡的问题)正在使用
read
而不是cat
只从管道中获取一条线,而不是试图将其全部吞下。Linux 中没有“匿名”管道;即使是使用
pipe(2)
系统调用或|
在 shell 中创建的那些也可以通过/proc/{pid}/fd/{fd}
or访问/proc/self/fd/{fd}
;他们将始终在文件系统中“创建”一个新节点。但是您可以使用该功能打开输入管道的写入端(反之亦然),这可以为您的 XY 问题提供“聪明”的答案: