Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > module Kernel > $stdin
$stdin
標準入力です。
自プロセスの標準入力をリダイレクトしたいときは $stdin に代入すれば十分です。
# 標準入力の入力元 /tmp/foo に変更 $stdin = File.open("/tmp/foo", "w") gets # 入力する $stdin = STDIN # 元に戻す
ただし、Kernel.#gets など、特定の組み込みメソッドは $stdin オブジェクトにメソッドを転送して実装されています。 従って、Kernel.#gets などが正しく動作するには、 $stdin オブジェクトに代入したオブジェクトが以下のメソッドを 正しく実装していなければいけません。
gets, readline, readlines, getc, readchar, tell, seek, pos=, rewind, fileno, to_io, eof, each_line, each_byte, binmode, closed?
例:
$stdin = Object.new def $stdin.gets "foo" end p gets() # => "foo"
自プロセスだけでなく、子プロセスの標準入力もリダイレクトしたいときは 以下のように IO#reopen を使います。
$stdin.reopen("/tmp/foo")
また、リダイレクトしたあと 出力先をまた元に戻したい場合は以下のようにします。
stdin_old = $stdin.dup # 元の $stdin を保存する $stdout.reopen("/tmp/foo") # $stdin を /tmp/foo にリダイレクトする gets # /tmp/foo から入力 $stdin.reopen stdin_old # 元に戻す
$stdin はグローバルスコープです。