我的问题类似于这个问题:如何检测我的shell脚本是否通过管道运行?.不同之处在于我正在处理的脚本是用Ruby编写的.
比方说我跑:
./test.rb
Run Code Online (Sandbox Code Playgroud)
我希望stdout上的文字有颜色,但是
./test.rb | cat
Run Code Online (Sandbox Code Playgroud)
我希望剥离颜色代码.
$stdout.isatty习惯使用或更多$stdout.tty?.我创建了一个小的test.rb文件来演示,内容:
puts $stdout.isatty
Run Code Online (Sandbox Code Playgroud)
结果:
$ ruby test.rb
true
$ ruby test.rb | cat
false
Run Code Online (Sandbox Code Playgroud)
参考:https://ruby-doc.org/core/IO.html#method-i-isatty
小智 5
使用IO#stat.pipe?。
仅在 TTY 设备上IO#tty?返回 true 。对于 UNIX 风格的管道返回 false(请参阅“man 2 pipeline”)。
$ echo "something" | ruby -e 'puts $stdin.stat.pipe?'
true
$ echo "something" | ruby -e 'puts $stdin.tty?'
false
$ ruby -e 'puts $stdin.tty?'
true
Run Code Online (Sandbox Code Playgroud)