【问题标题】:How does "less" command get stdin input?“less”命令如何获得标准输入?
【发布时间】:2013-03-28 00:34:53
【问题描述】:

我只是想知道这个问题: 如果我可以使用“ls -al | less”之类的东西,less 应该能够等待来自标准输入的输入。我期望发生的是在运行“less”命令后,程序挂起并等待输入(由于调用 gets() 或类似的东西。)

但为什么实际上它显示错误消息“缺少文件名(“less --help”寻求帮助)”结束退出?

谢谢。

【问题讨论】:

标签: linux bash shell pipe less-unix


【解决方案1】:

less 命令可以检查argc>1stdin 是否与文件(不是tty)关联。

【讨论】:

  • 你能解释一下它如何检查标准输入是否与文件相关联吗?我想这是我想知道的部分。谢谢。
  • 我们 C/Unix 老前辈记得在收到错误和尝试将 errno 转换为消息之间执行 printf 的新手错误,因为 printf 会调用以确定是否应该执行 line缓冲与否,所以你所有的 errno 都会告诉你“ENOTTY”(不是 TTY)。
【解决方案2】:

less 命令不是为此而设计的。当您在 bash 中执行命令时,它将一次显示所有信息。 less 命令用于一次一屏显示命令的 STDOUT 或文件的内容。

【讨论】:

    【解决方案3】:
    $ ls -al | less
    total 16
    drwxrwxr-x  4 hdante hdante 4096 Nov 24 17:11 .
    drwxr-xr-x 88 hdante hdante 4096 Mar 24 22:14 ..
    drwxrwxr-x  2 hdante hdante 4096 Nov 25 01:55 new
    drwxrwxr-x  3 hdante hdante 4096 Nov 24 18:27 old
    (END)
    

    它有效。你的少有问题。来自较少的手册页:

    http://www.linuxmanpages.com/man1/less.1.php https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/less.1.html

    手册将文件名描述为可选。

    诊断问题的提示:

    • 尝试别名 | grep less,查看命令是否被修改
    • 试用套装 | grep LESS,检查LESSCLOSE和LESSOPEN运行的脚本

    【讨论】:

    • 不,错误消息是勉强运行“less”的结果。我没有说清楚...
    猜你喜欢
    • 2014-02-02
    • 2021-06-24
    • 2011-12-13
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多