如何检测Ruby脚本是否通过shell管道运行?

时间:2017-05-04 18:02:39

标签: ruby shell pipe

我的问题与此类似:How to detect if my shell script is running through a pipe?。不同之处在于我正在编写的脚本是用Ruby编写的。

让我说我跑:

./test.rb

我希望stdout上的文字有颜色,但是

./test.rb | cat

我希望剥离颜色代码。

2 个答案:

答案 0 :(得分:5)

使用$stdout.isatty或更多惯用,$stdout.tty?。我创建了一个小的test.rb文件来演示,内容:

puts $stdout.isatty

结果:

$ ruby test.rb
true

$ ruby test.rb | cat
false

参考:https://ruby-doc.org/core/IO.html#method-i-isatty

答案 1 :(得分:0)

使用IO#stat.pipe?IO#tty?在TTY设备上仅返回true 。 对于UNIX风格的管道,返回false(请参阅“ man 2管道”)。

 $ echo "something" | ruby -e 'puts $stdin.stat.pipe?'
true
 $ echo "something" | ruby -e 'puts $stdin.tty?'
false
 $ ruby -e 'puts $stdin.tty?'
true