如何获取Ruby脚本的重定向状态(写入/追加/管道)

时间:2016-04-14 09:18:58

标签: ruby bash redirect append stdout

我的Ruby脚本维护一个m3u格式的播放列表,以标题开头:

#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播放列表文件。有时,我只想将输出附加到现有的播放列表文件,在这种情况下,我想省略标题,然后将剩余的内容写入m3u文件。出于这个原因,我想在我的脚本中检测STDOUT是否通过写入(>)或追加(>>)模式重定向,以便我可以选择是否打印{{ 1}}标题或不。如何检测#EXTM3U对象的状态?

1 个答案:

答案 0 :(得分:0)

我想你可以在写之前检查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,因为该文件实际上是空的,在这种情况下,我认为可以编写标题。