パイプかリダイレクトかファイル指定による入力が存在するかの判定

入力がなにも無ければヘルプ表示をしたいという場合に使える。

isinput.rb

unless File.pipe?('/dev/stdin') || IO.select([ARGF], nil, nil, 0)
  puts 'no input'
end
出力例
$ touch x
$ cat x | ruby isinput.rb
$ ruby isinput.rb < x
$ ruby isinput.rb x
no input
$ ruby isinput.rb y
isinput.rb:1:in `to_io': No such file or directory - y (Errno::ENOENT)
        from isinput.rb:1:in `select'
        from isinput.rb:1

ARGF が読めない場合の例外処理は適宜行う。