2013-03-28 50 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

相關問題