如何获取 Ruby 脚本 (write/append/pipe) 的重定向状态

How to get the redirection status of a Ruby script (write/append/pipe)

我的 Ruby 脚本维护了一个 m3u 格式的播放列表,它以 header:

开头
#EXTM3U

然后是一些标题和艺术家信息,然后是URL或文件路径,如下:

#EXTINF:0, Echo tv Terrorellenes akcióterv Echo Tv 16 perc 
https://www.youtube.com/watch?v=qxmpXHL6j74

总而言之示例:

#EXTM3U
#EXTINF:0, echo tv Terrorellenes akcióterv   Echo Tv 16 perc 
https://www.youtube.com/watch?v=qxmpXHL6j74
#EXTINF:0, echo tv Energiahatékonyság   Echo Tv 6 perc  34 másodperc 
https://www.youtube.com/watch?v=q8fZ7bo4gZo
#EXTINF:0, echo tv Jöhet a kvótanépszavazás   Echo Tv 23 perc 
https://www.youtube.com/watch?v=zkgIL1LXldI

我的脚本只是将其输出写入 STDOUT,然后我将其重定向到一个 .m3u 播放列表文件。有时,我只是想将输出附加到现有的播放列表文件中,在这种情况下,我想省略 header,而将剩余的内容写入 m3u 文件中。出于这个原因,我想在我的脚本中检测 STDOUT 是否被重定向为写入 (>) 或附加 (>>) 模式,以便我可以选择是否打印 #EXTM3U header 与否。我如何检测 STDOUT object 的状态?

我想你可以在写之前检查STDOUT是否为空:

% ruby -e 'puts File.zero?(STDOUT)' > test01
% cat test01
true
% ruby -e 'puts File.zero?(STDOUT)' >> test02
% cat test02
true
% ruby -e 'puts File.zero?(STDOUT)' >> test02
% cat test02
true
false

请注意,第一个追加将给出 true,因为文件实际上是空的,在这种情况下,我认为可以写入 header.