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 &

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


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

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

回答の条件
  • 1人2回まで
  • 登録:2008/01/24 10:53:14
  • 終了:2008/01/24 13:30:44

ベストアンサー

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402008/01/24 11:47:49

ポイント60pt

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

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

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


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

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

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

とする。

id:kanouk

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

よくわかりました。

2008/01/24 13:30:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません