#tty是什么?关于STDIN意味着什么/做红宝石?

时间:2016-06-25 18:59:46

标签: ruby io

阅读ruby文档并不过分有用here

  

如果ios与终端设备(tty)关联,则返回true,false   否则。

我希望得到一些额外的资源或解释,以帮助我更好地理解这一点。

对于上下文,我正在编写一个小命令行程序,它接受文件路径或管道内容到ruby可执行文件中,并使用#tty?来确定即将发生的事情。

谢谢!

2 个答案:

答案 0 :(得分:4)

似乎http://www.jstorimer.com/blogs/workingwithcode/7766125-writing-ruby-scripts-that-respect-pipelines提供了#tty?所做的最简洁的描述:

  

Ruby的IO#isatty方法(别名为IO#tty?)将告诉您相关的IO是否附加到终端。例如,当它被传送时,在$ stdout上调用它将返回false。

以下是您可能会觉得有用的一些相关信息:

通过What do pty and tty mean?的背景意义:

  

在UNIX中,/ dev / tty *是任何充当“电传打字机”的设备,即终端。 (称为电传打字机,因为这是我们在那些愚昧的日子里对终端所拥有的。)

本着问题的精神,这是从http://zetcode.com/lang/rubytutorial/io/写入/dev/tty的示例:

#!/usr/bin/ruby

fd = IO.sysopen "/dev/tty", "w"
ios = IO.new(fd, "w")
ios.puts "ZetCode"
ios.close

答案 1 :(得分:0)

看看grep如何处理传统UNIX方法的这种情况:没有指定文件?默认为$stdin并且不担心TTY状态,也许有人想要粘贴到终端中。如果指定了文件名,请从中读取并忽略STDIN。

tty?函数在那里,您可以知道是否应该发送ANSI转义码等内容来为输出着色。如果有人想通过STDIN提供输入,通常不是一个可靠的信号。