mkfifo
我在 shell 中创建了一个 fifo ,用 rw 模式打开exec 3<>fifo
。
当我sed 1q <&3
在另一个 shell 中运行并向 fifo 写入一行时,sed 不会打印该行,直到我向 fifo 写入另一行。为什么会出现这种情况?(这不会发生在head -n1
)
mkfifo
我在 shell 中创建了一个 fifo ,用 rw 模式打开exec 3<>fifo
。
当我sed 1q <&3
在另一个 shell 中运行并向 fifo 写入一行时,sed 不会打印该行,直到我向 fifo 写入另一行。为什么会出现这种情况?(这不会发生在head -n1
)
您可以在一个 shell 会话中复制它,例如
您将看到仅在延迟后才出现单独的输出线。
可能发生的情况是,Busybox 的实现在处理第一行之前继续读取以确定
$
(最后一行)地址说明符是否应匹配。在管道关闭之前,或者看到第二行出现之前,它无法确定$
应解析哪种方式。并非所有 sed 都会发生这种情况,例如 GNU sed 和我的 Mac 上的 sed 立即打印第一行。他们可以做到这一点,因为脚本不使用
$
,所以所需的所有信息都已经存在。如果您将脚本更改为使用的内容$
,例如他们也必须等待第二条线。
据推测,Busybox 只是更简单,无论如何都会等待,而不必费心检查是否
$
已使用。