linux - 是否存在任何神奇的 "stdout"文件?

标签 linux bash shell pipe

<分区>

有些实用程序无法输出到标准输出。

例子

util out.txt

它有效。但有时我想将输出通过管道传递给其他一些程序,例如:

util out.txt | grep test

linux 中是否存在神奇的“stdout”文件,所以当我替换上面的 out.txt 时,它会将数据重定向到 stdout 管道?


注意:我知道 util out.txt && cat out.txt | grep 测试,所以请不要发布这样的答案。

最佳答案

你可以使用/dev/stdout。但是,如果程序需要 lseek(2),那并不总是有效。 (或 mmap(2))它。

通常 /dev/stdout 是到 /proc/self/fd/1 的符号链接(symbolic link)(参见 proc(5))。

IIRC 某些程序的某些版本(可能是 GNU awk )专门 /dev/stdout 文件名(例如,能够没有 /proc/ 正在挂载)。

程序参数的一个常见但不通用的约定是考虑 -,当用作文件名时,表示 stdout(或 stdin)。例如,参见 tar(1)-f - 一起使用。

如果您编写一些实用程序,我建议尽可能遵循 - 约定,并记录 stdout 是否需要可搜索。

一些程序正在测试 stdoutstdin 是否是终端(例如使用 isatty(3) )以表现不同,例如通过使用 ncurses .如果您编写这样的程序,我建议提供一个程序选项来禁用该检测。

关于linux - 是否存在任何神奇的 "stdout"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47995639/

相关文章:

linux - 我需要计算文件中第一个字段中的符号数量,并将它们与另一个字段相加

linux - 提取匹配项并不同于 2 个巨大的文本文件

bash - @<(cat <<- EOF 在 Bash 中做了什么?

linux - 命令存在但在 bash 脚本中找不到

bash - 使用 shell 脚本编辑文本格式

linux - gdb/ddd 程序收到信号 SIGILL

c - 节目入口自认

linux - 有没有我可以以非 root 用户身份运行的命令,以查看用户是否可以运行某个 sudo 命令

linux - 编辑文件时保留时间戳

linux - 如何引用先前输出中的特定行?