如何只读取文件描述符输出的第一行?

How to read only the first line of the output from a file descriptor?

我有来自 fd3 的输出,来自我正在重定向到这样一个文件的程序:

program 3> output.log

在这种情况下,我只需要将程序提供的第一行写入日志,并且不想在程序的整个生命周期内都打开此文件的写句柄。

如何只读第一行?我想我可以使用 shell 命令 read 但我不知道如何将它用于 stdout 以外的任何东西。请注意,我不想将 fd3 重定向到 stdout,然后使用 read,因为我正在将 stdout 捕获到另一个日志。

您可以通过这种方式捕获任意文件描述符的第一行:

$ (printf '%s\n' foo bar >&3) 3> >(head -n1)
foo

这会向 FD 3 打印两行并将其重定向到 head 的标准输入。如果您想将该结果存储到文件中,只需在 process substitution.

中重定向