我希望通过 FIFO 从进程 B 向进程 A 发送命令。
该命令将是一个单词或一个句子,但完全包含在“\n”终止的行上 - 但通常可以是多行记录,由另一个字符终止。
我尝试过的代码的相关部分如下所示:
过程一:
$ mkfifo ff
$ read x < ff
进程 B:( 从另一个终端窗口)
$ echo -n "cmd" > ff
$ echo -n " arg1" > ff
$ echo -n " arg2" > ff
...
$ echo " argN" > ff
但是,发生的情况是,read
返回值为cmd
,即使bash
手册页说,默认情况下,读取\n
终止的行,除非-d delim
使用该选项。
所以,我接下来尝试-d delim
明确指定,
$ read -d "\n" x < f`
还是一样的结果。
可以echo -n
关闭 FIFO 的文件“描述符”吗?
我在 Ubuntu 18.04 上使用 bash 4.4.x。
是的,这正是发生的事情:
重定向仅在它们设置的单个命令的持续时间内生效。写入端的解决方法是 a) 使用复合块对命令进行分组,或 b)
exec
用于在整个脚本期间(或直到关闭)打开文件描述符。一个)
(您也可以将命令放在函数中,并在调用函数时使用重定向。)
b)
如果你想在阅读端修复它,你需要循环
read
并连接你得到的字符串。由于您明确需要部分非行,并跳过文件结束条件,因此您不能将退出代码read
用于任何有用的事情。