2010-08-12 49 views
1

我運行了下面的腳本來爲oracle設置環境變量(oracle_env.sh,它自帶了oracle包)。導出的變量沒有反映在「env」輸出

ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server 
export ORACLE_HOME 
ORACLE_SID=XE 
export ORACLE_SID 
NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh` 
export NLS_LANG 
PATH=$ORACLE_HOME/bin:$PATH 
export PATH 
if [ $?LD_LIBRARY_PATH ] 
then 
     LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH 
else 
     LD_LIBRARY_PATH=$ORACLE_HOME/lib 
fi 
export LD_LIBRARY_PATH 

,當我跑env以確保變量正確導出之後,我發現沒有屬性遠銷(以下爲輸出)。

invincible:/home/invincible# /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh 
invincible:/home/invincible# env | grep ORACLE_HOME 
invincible:/home/invincible# 

現在我不確定變量是否正確導出。如果不是我做錯了什麼?請幫助我。 還有一件事,我以root身份運行。

+0

調試自帶的安裝程序不是編程相關 – meagar 2010-08-12 15:52:25

+1

腳本的腳本,顧名思義,是一個類型的節目。 – Darron 2010-08-12 16:00:19

回答

3

腳本只設置與運行子shell內部的環境,您應該source它:

# POSIX 
. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh 

# bash/ksh 
source /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh 
+0

謝謝..它爲我工作。 – hnm 2010-08-12 16:01:09

0

導出變量只能使它們提供給您導出殼體的孩子他們從。您似乎正在嘗試去改變父shell中的環境變量,沒有辦法。您可以通過使用「點」命令採購劇本改在同一個外殼中的變量:

. myscript 
2

我相信,當你運行一個腳本時,bash叉和高管腳本在一個新的shell實例,任何出口在腳本中完成不會傳播回您的父shell。

但是似乎你可以簡單地執行你的腳本:

prompt$ . /path/to/script.sh # note the period! 

例子:

prompt$ echo "export FOO=foobar" > /tmp/tst 
prompt$ sh /tmp/tst 
prompt$ echo $FOO 

prompt$ . /tmp/tst 
prompt$ echo $FOO 
foobar 
1

我相信你應該使用加載該腳本。

source /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh 

人源

source filename [arguments] 

     Read and execute commands from filename in the current shell environment and 
return the exit 

     status of the last command executed from filename.