我运行以下脚本为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身份运行的。
答案 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