bash - 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
打开以使用 FD(文件描述符)fifo
进行写入20.command >&20
将输出重定向到 FD 20。exec 20>&-
关闭 FD 20。
以下摘自man bash
:
exec [-cl] [-a名称] [命令[参数]]
[...] 如果没有指定 command ,任何重定向都在当前shell中生效,返回状态为0。如果有重定向错误,返回状态为1。
[ n ]>单词
输出重定向会导致打开其名称来自word扩展的文件,以便在文件描述符n上写入,如果未指定n,则打开标准输出(文件描述符 1) 。如果文件不存在,则创建它;如果确实存在,则将其截断为零大小。[...]
[ n ]>&单词
[...] 如果word评估为
-
,则文件描述符n被关闭。[...]
推荐阅读
- arrays - Gatsby:在组件中访问 props 数组的长度会导致 TypeError(属性未定义)
- python - 根据另一个行值复制熊猫中的行值
- javascript - React Redux 属性未定义
- c# - 滑动导致 GetMouseButtonDown(0)
- javascript - 在 KnexJS 上循环
- python - OpenCV:找到具有轮廓匹配的相似对象
- google-apps-script - 谷歌表格脚本在基于filterLogic传输后删除表格范围
- aws-lambda - 如何在“sam package/deploy”运行时指定 AutoPublishAlias?
- python - 灰度图像python实现
- r - R:如何为每个主题创建一个排名变量,不包括 NA 值