Ruby 2.5.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Kernelモジュール > $>

variable $>

$> -> object[permalink][rdoc]
$stdout -> object

標準出力です。

組み込み関数 Kernel.#printKernel.#putsKernel.#p などのデフォルトの出力先となります。 初期値は Object::STDOUT です。 コマンドラインオプションオプション -i を指定した場合には 読み込み元と同じ名前のファイルを表します。

$stdout に代入するオブジェクトには write という名前のメソッドが定義されていなければいけません。

自プロセスの標準出力をリダイレクトしたいときには、 以下のように $stdout に代入すれば十分です。

# 標準出力の出力先を /tmp/foo に変更
$stdout = File.open("/tmp/foo", "w")
puts "foo"         # 出力する
$stdout = STDOUT   # 元に戻す

自プロセスだけでなく、子プロセスの標準出力もリダイレクトしたいときは 以下のように IO#reopen を使います。

STDOUT.reopen("/tmp/foo", "w")

また、リダイレクトしたあと 出力先をまた元に戻したい場合は以下のようにします。

stdout_old = $stdout.dup        # 元の $stdout を保存する
$stdout.reopen("/tmp/foo")      # $stdout を /tmp/foo にリダイレクトする
puts "foo"                      # /tmp/foo に出力
$stdout.flush                   # 念のためフラッシュする
$stdout.reopen stdout_old       # 元に戻す

$stdout はグローバルスコープです。

[SEE_ALSO] Rubyの起動