导出的变量不会反映在“env”输出中

时间:2010-08-12 15:44:11

标签: linux shell debian environment-variables

我运行以下脚本为oracle设置环境变量(oracle_env.sh,它附带oracle包本身)。

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身份运行的。

4 个答案:

答案 0 :(得分:3)

脚本只在其运行的子shell中设置环境。您应该来源:

# 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

答案 1 :(得分: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

答案 2 :(得分:1)

我相信您应该使用来源来加载该脚本。

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

来自 man source

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.

答案 3 :(得分:0)

导出变量只会使您可以从导出它们的shell的子项中使用它们。正如您似乎正在尝试的那样,无法更改父shell中的环境变量。您可以通过使用“dot”命令获取脚本来更改同一shell中的变量:

. myscript