2013-03-28 114 views
2

我只是想知道这个问题: 如果我可以使用诸如“ls -al | less”之类的东西,少一些应该有能力等待来自stdin的输入。我期望发生的是在运行“less”命令之后,程序挂起并等待输入(作为调用gets()或类似的结果)。“less”命令如何获得stdin输入?

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

谢谢。

+0

也见相关问题http://stackoverflow.com/questions/1441251/less-gets-keyboard-input-from-stderr/1441368#1441368 – 2013-09-06 13:23:56

回答

2

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

+0

运行你能否解释它是如何检查标准输入是否与文件关联的?我认为这是我想知道的部分。谢谢。 – babel92 2013-03-28 00:51:48

+1

http://www.thinkage.ca/english/gcos/expl/c/lib/istty.html – kev 2013-03-28 00:59:07

+3

我们的C/Unix老人记得在获取错误和尝试打开errno之间执行printf的菜鸟错误成为一个消息,因为printf会做一个调用来决定它是否应该进行行缓冲,所以你所有的errno会告诉你是“ENOTTY”(不是TTY)。 – 2013-03-28 01:02:09

0

less命令不是在这个问题上设计的。当你在bash中执行命令时,它会一次显示所有的信息。 less命令用于一次显示一个命令的STDOUT或一个文件的内容。

0
$ 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少,看命令是否被修改
  • 试试set | grep的LESS,并检查脚本被LESSCLOSE和LESSOPEN
+0

没有那个错误信息是几乎没有运行“少”的结果。我没有说清楚... – babel92 2013-03-28 00:59:42