如何只读取文件描述符输出的第一行?
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.
中重定向
我有来自 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.