gpt4 book ai didi

linux - 为什么更多命令不能读取标准输入,而是从管道标准输入读取?

转载 作者:太空狗 更新时间:2023-10-29 11:45:00 25 4
gpt4 key购买 nike

我对more 命令有疑问。通常,more 不能从 stdin 读取内容,但是使用管道它可以从 stdin 读取内容。

例如,在尝试执行 more 命令以从 stdin 获取输入时,它被拒绝了。

$ more [Enter]
Usage: more [options] file...
Options:
-d display help instead of ring bell
-f count logical, rather than screen lines
-l suppress pause after form feed
-p suppress scroll, clean screen and disblay text
-c suppress scroll, display text and clean line ends
-u suppress underlining
-s squeeze multiple blank lines into one
-NUM specify the number of lines per screenful
+NUM display file beginning from line number NUM
+/STRING display file beginning from search string match
-V output version information and exit

但是,这里它从管道 stdin 获取输入。

$ cat file.txt  
This is for testing purpose
$ cat file.txt | more
This is for testing purpose

我想知道这是怎么发生的(意味着不是从 stdin 而是从管道 stdin 读取?

最佳答案

more 区分其标准输入是来自 TTY 还是来自其他地方(管道、常规文件等)。如评论中所述,如果输入来自 TTY,more 将拒绝运行,因为它需要 TTY 来读取其命令击键。另一方面,cat 不是交互式的,也不会显式处理 TTY,因此它可以不关心其输入是 TTY 还是其他类型的打开文件。

还有许多其他 Unix 实用程序的示例会根据标准输入或输出是否为 TTY 而表现不同。例如,ls 将其输出格式化为多列,而 ls | cat 没有。

关于linux - 为什么更多命令不能读取标准输入,而是从管道标准输入读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21448452/

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