2016-03-10 41 views
0

我有一個ruby腳本執行一個shell腳本。我如何將shell腳本數據傳回給ruby腳本。如何將shell腳本變量傳回給ruby?

 desc "Runs all the tests" 
     lane :test do 

     sh "../somescript.sh" 

     print variables_inside_my_script // i want to access my script data here. 

     end 

我能夠使用從ruby到shell腳本的環境變量來做相反的場景。

 desc "Runs all the tests" 
     lane :test do 

     puts ENV["test"] 

     sh "../somescript.sh" // access test using $test 

     end 

感謝

+0

不可能。子進程繼承父級環境的副本;他們不能影響父母的環境。如果您想將數據從shell腳本傳遞到調用進程,最簡單的方法就是通過它的輸出。 – Amadan

回答

2

這不是那麼清楚variables_inside_my_script應該在這裏的意思,但是通常操作系統不允許從子shell一個「出口」變量父,所以Ruby開發者通常用反引號(或等價)調用子命令,以便父代可以讀取子shell的輸出(標準輸出),例如

output = %x[ ls ] 

根據你真正需要什麼,還有其他可能有用的技術。

  1. Exporting an Environment Variable in Ruby

  2. http://tech.natemurray.com/2007/03/ruby-shell-commands.html

  3. http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html

+0

謝謝,我會試一試。 – sonoluminescence

1

如果shell腳本在你的控制之下,該腳本編寫Ruby的語法STDOUT環境定義。在Ruby中,你eval輸出:

eval `scriptsettings.sh` 

如果你的腳本生成其他輸出,寫入環境定義到一個臨時文件,並使用load命令來閱讀。

相關問題