gpt4 book ai didi

linux - 读取 `stdout` 和 `stderr` 的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:21 25 4
gpt4 key购买 nike

我正在尝试使用以下命令读取 stdoutstderr 的值:

cat /dev/stderr

cat /dev/stdout

但是,命令一直在运行。

最佳答案

改用 FIFO

从技术上讲,/dev/stdout/dev/stderr 实际上是文件描述符,而不是 FIFO 或命名管道。在我的系统上,它们实际上只是指向 /dev/fd/1/dev/fd/2 的符号链接(symbolic link)。这些描述符通常链接到您的 TTY 或 PTY。因此,您无法真正按照自己的方式阅读它们。

您可能需要的是mkfifo 实用程序。例如,写入标准错误,然后从另一个命令或脚本读取它:

# Create a named pipe.
$ mkfifo error

# See what a named pipe looks like in the filesystem.
$ ls -l error
prw-r--r-- 1 user staff 0 May 13 01:47 error|

# In a subshell: echo to stdout, duplicate stdout to stderr,
# write stderr to the error FIFO. Background to avoid blocking.
# Then read from the FIFO until empty, which ends both tasks.
$ ( echo foo >&2 2> error & ); cat error
foo

作为一个更详细但不那么扭曲的示例,请考虑以下内容:

$ ruby -e 'STDERR.puts "Some error."' 2> error & cat error
[1] 32458
Some error.
[1]+ Done ruby -e 'STDERR.puts "Some error."' 2> error

在此示例中,Ruby 使用标准错误将字符串写入我们之前创建的 error FIFO。写入发生在后台,但会阻塞,直到 FIFO 被 cat 命令清空。 FIFO 清空后,后台作业完成。

FIFO 只是一种特殊类型的文件,因此您可以在处理完 rm 错误 后将其删除。

关于linux - 读取 `stdout` 和 `stderr` 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43949166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com