2012-02-19 140 views
5

可能重複:
Exporting an Environment Variable in Ruby是否可以從ruby腳本導出環境屬性?

我需要從Ruby腳本內設置幾個環境屬性。

通常情況下,在bash,我做到以下幾點:

$ export SOME_VAR=some_value 

但在紅寶石,下面的(顯然)不工作:

irb(main):002:0> `export SOME_VAR=some_value` 
(irb):2: command not found: export ASDF=1 
=> "" 

有沒有辦法做到這一點?

+1

這種聲音向後給我。你想達到什麼目的? – 2012-02-19 17:54:49

+0

@JensTinfors我只是在一個紅寶石腳本這使得一些外殼命令,其中一個預計的特定環境變量被設置用於此。如果我在bash腳本中使用'export',但這不會通過ruby shell命令(反引號或系統)工作。使用ENV似乎可以很好地工作,就像回答說的那樣,所以這對我來說非常有價值。 – 2016-03-02 14:24:05

+0

@MaxWilliams它只是您設置的環境變量將僅存在於當前進程中。反向意味着該環境屬於shell,ruby進程是shell的子進程,請參閱我的意思? :) – 2016-03-15 16:33:48

回答

8

http://ruby.about.com/od/rubyfeatures/a/envvar.htm,你可以這樣寫:

ENV['SOME_VAR'] = 'some_value' 
+1

注意:這將爲當前的Ruby進程以及任何子進程(例如:用'system'或反引號創建的)設置環境變量。 – 2012-02-19 18:00:25

+0

@凱爾伯頓:是的,絕對。我假設這正是OP想要的,但我可能是錯的。 – ruakh 2012-02-19 18:02:43

1

嘗試`ENV [ 'SOME_VAR'] = 'SOME_VALUE'。

您不能堅持執行腳本這種對環境的影響,該腳本完成後。

在我的答案的評論中討論的一個技巧是從你的ruby腳本打印有效的shell代碼到控制檯 - 這是而不是你需要什麼,但它可能是有用的知道它可能是有用的也是這樣工作的。

$ echo "puts 'export foo=bar'" > test.rb 
$ echo $foo 

$ source <(ruby test.rb) 
$ echo $foo 
bar 
+1

我真的不認爲'source。/ my_script.rb'可以正常工作。考慮一下 - 對於你說的是真的,Ruby腳本必須在與現有的Bash shell相同的進程中運行,然後,當Ruby腳本結束時,該進程將不得不恢復爲Bash shell。 – ruakh 2012-02-19 17:55:50

+0

在這種情況下shebang應該是什麼樣子? – 2012-02-19 17:56:17

+0

你可以用「源」程序的輸出,這樣的慶典:'源<(./ my_script.rb)' – 2012-02-19 17:59:32

1

如果你不想劇本完成後這個值來堅持,你可以直接改變ENV

ENV['SOME_VAR'] = 'some_value' 
puts ENV['SOME_VAR'] 
# => some_value 

如果你想堅持,那麼你可能(除了這)具有本無功寫信給你的系統上的~/.bashrc或類似的文件。

相關問題