【问题标题】:exported variables are not reflected in "env" output导出的变量不会反映在“env”输出中
【发布时间】:2011-03-29 00:31:30
【问题描述】:

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

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

【问题讨论】:

  • 调试安装程序附带的脚本与编程无关
  • 脚本,根据定义,是一种程序。

标签: linux shell debian environment-variables


【解决方案1】:

脚本只设置运行它的子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

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      我认为您应该使用 source 来加载该脚本。

      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.
      

      【讨论】:

        【解决方案4】:

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

        . myscript
        

        【讨论】:

          猜你喜欢
          • 2018-06-02
          • 2020-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多