2009-09-29 67 views
0

我的ruby腳本需要連接到Oracle數據庫。所以我需要在腳本運行之前正確地導出ORACLE_HOME和LD_LIBRARY_PATH。有沒有一種方法可以在不使用shell腳本的情況下導出這些env變量?我試圖把ENV ['ORACLE_HOME'] ='/ usr/local/oracle_client'放在腳本的第一行,它不起作用。 現在唯一可行的方法是編寫一個shell腳本,在那裏導出這些變量,然後在那裏運行ruby。 shell腳本的樣子:如何自動導出運行ruby腳本所需的oracle環境變量?

出口ORACLE_HOME = '在/ usr /本地/ oracle_client' 出口LD_LIBRARY_PATH = '在/ usr /本地/ oracle_client/lib目錄' 紅寶石myscript.rb --options

這是有點醜因爲用戶必須進入shell腳本來更改選項。我想知道是否有更好的方法來做到這一點。所以用戶可以在命令行下執行:ruby myscript.rb --options

回答

1

爲什麼不提供ruby選項作爲shell腳本的參數?例如,

#!/bin/bash  
export ORACLE_HOME='/usr/local/oracle_client' 
export LD_LIBRARY_PATH='/usr/local/oracle_client/lib' 
ruby myscript.rb $* 

很明顯,您可能想要添加論證合理性檢查等,但這給出了這個想法。

+0

因爲他不是他的劇本的消費者,所以最好保存clinets這樣的conf ... – khelll 2009-09-29 22:10:47

+0

你是什麼意思客戶端配置? OP說這個腳本很難看,因爲用戶必須修改腳本來提供選項。這個答案解決了這個問題。它提供的命令行解決方案不比運行ruby命令更復雜。它還增加了價值,因爲默認選項和驗證可以在shell腳本中完成。 – DCookie 2009-09-29 23:06:07

+0

它工作,感謝DCookie。 – swingfuture 2009-09-30 17:16:50

1

爲什麼不通過Kernel.system來調出呢?

system("export ORACLE_HOME='/usr/local/oracle_client'") 
system("export LD_LIBRARY_PATH='/usr/local/oracle_client/lib'") 
+0

你的意思是我把這些行放在腳本的頂部?我試過了,但是當我打印env變量(放入ENV ['ORACLE_HOME'])時,它們仍然是空的。 – swingfuture 2009-09-30 16:38:17

+0

它不起作用,因爲,正如kernel.system的文檔所述:「在子shell中執行cmd,...」。只要系統調用完成,子shell就會退出(因此它的環境已經消失),並且您又回到了原點。 – DCookie 2009-09-30 17:42:46

+0

你真正需要的東西類似於Perl的Env模塊,但我知道關於紅寶石的zip,所以我不能說在這些線上有什麼可用的東西...... – DCookie 2009-09-30 17:56:36

相關問題