2012-09-06 14 views
9

私はEC2スポットインスタンスでRを実行しています。スクリプトを実行するとインスタンスを終了してスポットリクエストをキャンセルするにはRが必要です。その私が/.bashrcに、環境変数に「リクエストID」を設定していると私の計画は、単にスクリプト一度Rに次のコードを呼び出すようにしたためにRに環境変数を読み込ませるにはどうしたらいいですか?

は私が午前問題がある

system("ec2-cancel-spot-instance-requests $SIR") 

準備ができていますRが外部のRからenvと入力したときに見たのと同じ環境変数を「見る」わけではないので、コマンドは機能しません。

私はチェックしていますが、私は自分の環境変数を/etc/environmentに設定していれば、それらの変数を見ることができますが、ここでは別の問題です。これらの変数は、(インスタンスIDと要求IDは、スポットインスタンスが作成されるたびに異なる)、動的であるため、私はの形でそれらを作成するためのスクリプトを実行しています:

そのファイルがダイナミックに含ま
export SIR=`cat /etc/ec2_instance_spot_id.txt` 

ID

したがって、どのように「動的」環境変数を/etc/environmentに挿入できますか?あるいは、環境変数をRに読み込ませるには、どうすればいいですか?/.bashrc

正しい方向のヒントがあれば幸いです!

+0

と、この変数にアクセスすることができますが

MYDIRECTORY="/home/wherever" 

Rを再起動した後、書き込みRの変数を設定するには〜/ .profileにはSys.getenv()からアクセスできましたが、〜/ .bashrcではアクセスできませんでした。 'source〜/ .profile'を実行してから、新しい変数を追加した後に端末から' R'を実行しなければなりませんでした。 – wordsforthewise

答えて

9

Sys.getenv()Sys.getenv("PATH")としたいとします。

またはあなたたとえば、あなたは現在の環境に記載されているすべての変数を参照してくださいSys.getenv()の使用についての~/.Renvironmentなど

+0

あなたの時間のために多くのダークに感謝します。私が抱えている問題は、例えば '名前(s < - Sys.getenv())'を実行すると 'SIR'が存在しないということです。' SIR <-Sys.getenv( "SIR") ' SIRには何もありませんが、私がRを終了し、環境変数のリストが 'Sys.getenv()'のときとはまったく異なっているので、必要なSIRなどを見ることができます。私は 'Renvironment'を見て回ります。ありがとうございました。 – JordanBelf

+0

OK、これは面白いです。要求IDとインスタンスIDを持つ2つのファイルを既に作成している場合、R内の環境変数を読みたいのですが?私はただそれらのファイルの価値を取得し、私の仕事を実行することができます...これは、私がRを終了したときに見たのと同じ環境変数を見ていない理由を説明していませんが、私は行くだろう!インスピレーションをありがとう! – JordanBelf

+4

私はこの作業を 'Sys.setenv()'を使って行いました。基本的に私の環境変数を外部RからRにコピーしていますが、これは私のスクリプトを動作させるものですが、なぜR – JordanBelf

6

を学ぶためにhelp(Startup)を参照して、起動時に変数を設定するよう

SIR <- Sys.getenv("SIR") 
system(paste("ec2-cancel-spot-instance-requests", SIR)) 

を試してみてください。

ただし、現在のシェルで使用されているものとは異なります(例:.profileで指定)。

は、私は、変数ことがわかったあなたのホームディレクトリに .Renvironファイルを作成し、

Sys.getenv("MYDIRECTORY") 
関連する問題