人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Linuxの環境変数についての質問(たぶん)です。

iostatコマンドをRubyスクリプトから実行したいケースがあって、
以下のようなスクリプトを書きました。


#! /usr/bin/ruby -w

def main
system("setenv LANG C")
system("iostat 1 10 > io.txt &")
end

main

__END__


コマンドの出力結果を英語にしたいと考えて
"setenv LANG C"という記述をしたのですが、
実際に出力されたファイルは以下のように日本語のものでした。


Linux 2.6.9-22.xxxxxx (xxxxxx) 2008年01月24日

CPU平均: %user %nice %sys %iowait %idle
0.39 0.00 0.64 0.02 98.95

デバイス: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
cciss/c0d0 4.01 4.71 142.03 3610824 108904332


コマンドから普通に、

$ setenv LANG C
$ iostat 1 10 > io.txt &

とすれば、ちゃんと英語表記になります。


・なぜこのような現象が起こるのでしょうか?
・解決するためにはどうしたらよろしいでしょうか?

以上、よろしくお願いします。

●質問者: kenk
●カテゴリ:コンピュータ
✍キーワード:00 1月24日 2.0 2008年 CPU
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●60ポイント ベストアンサー

・なぜこのような現象が起こるのでしょうか?

システム関数で呼び出したコマンドは別プロセスが生成される。

特に環境変数については起動された別プロセスで変更しても元のプロセスである ruby プログラムに影響を与えることはない。


・解決するためにはどうしたらよろしいでしょうか?

いくつか方法はあると思うが、env コマンドを使用し、

 system("env LANG=C iostat 1 10 > io.txt &")

とする。

◎質問者からの返答

ありがとうございました!

よくわかりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ