#tty 是啥?在标准输入上的意思/在红宝石中做?

Posted

技术标签:

【中文标题】#tty 是啥?在标准输入上的意思/在红宝石中做?【英文标题】:What does #tty? on STDIN mean / do in ruby?#tty 是什么?在标准输入上的意思/在红宝石中做? 【发布时间】:2016-10-28 04:02:28 【问题描述】:

阅读 ruby​​ 文档并没有太大帮助 here:

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

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

就上下文而言,我正在编写一个小命令行程序,它接受文件路径或管道内容到 ruby​​ 可执行文件中,并使用 #tty? 来确定传入的内容。

【问题讨论】:

即使从控制台 (= tty) 调用,您的脚本仍可能需要读取文件,对吗?我建议您使用传递的参数作为文件路径,如果没有传递参数,则从$stdin 读取。更好的是,使用两个命名参数,其中一个使用文件名参数化,另一个指定要从 $stdin 读取输入。 【参考方案1】:

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

Ruby 的 IO#isatty 方法(别名为 IO#tty?)会告诉您有问题的 IO 是否连接到终端。例如,在通过管道传输时在 $stdout 上调用它会返回 false。

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

Detecting stdin content in Ruby How can you check for STDIN input in a Ruby script? https://***.com/a/273605 https://gist.github.com/timuruski/6072363

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

【讨论】:

谢谢,@SoAwesomeMan。正是我想要的 - 附加资源和一些解释。【参考方案2】:

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

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

【讨论】:

以上是关于#tty 是啥?在标准输入上的意思/在红宝石中做?的主要内容,如果未能解决你的问题,请参考以下文章

“|”是啥意思(单管道)在 JavaScript 中做啥?

“:foo”在红宝石中是啥意思[重复]

LTE 的调度周期TTI是啥意思?一般设置成多少

&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]

红宝石:“p *1..10”中的星号是啥意思

unix ps 命令中的 TTY 是啥意思?