“cat”和“less”之间的标准输入行为

box*_*lk1 1 less cat stdin

当我发出时cat,终端挂起等待 stdin 输入。但是,当less发布时,我得到Missing filename ("less --help" for help). 众所周知,less和 都cat接受标准输入。有什么不同?这如何反映在手册页中?

Mar*_*ick 6

less 当没有给出任何文件名参数时运行以下代码:

if (isatty(fd0))
{
    error("Missing filename (\"less --help\" for help)", NULL_PARG);
    quit(QUIT_OK);
}
return (edit("-"));
Run Code Online (Sandbox Code Playgroud)

当标准输入是终端时,它会抱怨。如果标准输入是一个普通的文件或管道,那就没问题了。

它可能这样做是因为它需要在每个页面的末尾读取来自终端的响应,并且无法区分正在分页的数据和响应。

这在手册页中没有提到。也许应该是。

cat不分页输出,也不从终端读取响应。就 stdin 作为终端而言,它没有任何限制。