如何解决Bash 如何在第一次发送后不中止地向/从命名管道写入/读取
给定:
Bash 命令行(终端 1):
> mkfifo pipo
> cat pipo
Bash 命令行(终端 2):
> echo -e "Hello World\nHi" > pipo
结果:
(终端 1)中的 bash 打印:
Hello World
Hi
并中止。
问题:
如何实现它不会中止,而是允许通过 pipo
发送另一个回声?
解决方法
这是因为 echo ... > fifo
打开然后关闭 fifo。作为一种解决方法,您可以这样做:
# open for writing
exec 20> fifo
echo foo >&20
echo bar >&20
...
# to close it
exec 20>&-
稍微解释一下:
-
exec 20> fifo
打开fifo
以使用 FD(文件描述符)20 写入。 -
command >&20
将输出重定向到 FD 20。 -
exec 20>&-
关闭 FD 20。
以下摘自man bash
:
-
exec [-cl] [-a name] [command [参数]]
[...] 如果没有指定command,在当前shell中任何重定向都生效,返回状态为0。如果有重定向错误,返回状态为1。
-
[n]>词
输出重定向导致名称由词扩展产生的文件被打开以写入文件描述符n,或者如果 n 未指定,则为标准输出(文件描述符 1)。如果文件不存在,则创建它;如果确实存在,则将其截断为零大小。 [...]
-
[n]>&word
[...] 如果 word 的计算结果为
-
,则文件描述符 n 是关闭。 [...]
在 1 号航站楼做
tail -f pipo
而不是cat pipo
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。