<分区>
有些实用程序无法输出到标准输出。
例子
util out.txt
它有效。但有时我想将输出通过管道传递给其他一些程序,例如:
util out.txt | grep test
linux 中是否存在神奇的“stdout”文件,所以当我替换上面的 out.txt
时,它会将数据重定向到 stdout
管道?
注意:我知道 util out.txt && cat out.txt | grep 测试
,所以请不要发布这样的答案。
<分区>
有些实用程序无法输出到标准输出。
例子
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 是否需要可搜索。
一些程序正在测试 stdout 或 stdin 是否是终端(例如使用 isatty(3) )以表现不同,例如通过使用 ncurses .如果您编写这样的程序,我建议提供一个程序选项来禁用该检测。
关于linux - 是否存在任何神奇的 "stdout"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47995639/