echo "abc" | less
less在STDIN上接收4个字节“a”,“b”,“c”,“\ x0A”,并以自己特殊的方式向用户显示“abc”(使用备用屏幕模式等) 。
然后用户在键盘上输入“n”,通过在终端的左下角以反色显示“找不到图案(按RETURN)”来做出响应。我们还看到它在左边打印了一系列波浪号。
显然,为了知道尝试搜索其搜索缓冲区中的内容,不得不接收“n”字符的输入。
它从哪里得到“n”通过?我把它输入到终端,但终端连接到less的STDIN?如果是这样,那么将“n”卡在显示缓冲区中会不会少?好吧,它可以告诉我,但是如果我运行echo "abc" | tail -f
则不行。
我怎么能搞乱这个文件描述符?我正在构建一个perl程序,将鼠标转义码转换为关键代码,这样我就可以创建一个特殊的管道或包装的命令/程序,它像寻呼机一样工作,但可以是鼠标交互式的。但是,如果较少的STDIN是输入文件而不是终端本身,我无法弄清楚如何进入那里。我真的希望我可以通过我的mapper程序管道交互式终端输出。
我也知道可以检查程序的STDIN是否是终端,但这对我没有帮助
更新:好的,我做了一些挖掘,看起来我一直在寻找神奇的/dev/tty
。希望有人能告诉我如何搞砸它。
更新:精炼问题:我是否真的需要在我需要翻译事件的特定寻呼机实例上构建并运行pty
?听起来很痛苦,因为我需要拥有所有这些流程管理和内容。 IO:Pty:Easy
看起来很有希望。
答案 0 :(得分:0)
如果你这样做
$ lsof -p <pid-of-less>
你会在底部看到类似
的内容less 30875 user 3r CHR 5,0 0t0 1037 /dev/tty
显示less
如何打开控制终端/dev/tty
来读取命令。