我的问题与此类似:How to detect if my shell script is running through a pipe?。不同之处在于我正在编写的脚本是用Ruby编写的。
让我说我跑:
./test.rb
我希望stdout上的文字有颜色,但是
./test.rb | cat
我希望剥离颜色代码。
答案 0 :(得分:5)
使用$stdout.isatty
或更多惯用,$stdout.tty?
。我创建了一个小的test.rb文件来演示,内容:
puts $stdout.isatty
结果:
$ ruby test.rb
true
$ ruby test.rb | cat
false
答案 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