экспортированные переменные не отражаются в выводе "env" - PullRequest
1 голос
/ 12 августа 2010

Я запустил приведенный ниже скрипт для установки переменных среды для 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 ]

3 голосов
/ 12 августа 2010

Сценарии только устанавливают среду внутри подоболочки, в которой он работает. Вы должны получить ее:

# 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 голосов
/ 12 августа 2010

Я полагаю, что когда вы запускаете сценарий, bash разветвляются и исполняете сценарий в новом экземпляре оболочки, все операции экспорта, выполненные в сценарии, не распространяются обратно в родительскую оболочку.

Однако кажется, что вы можете просто выполнить свой скрипт с помощью:

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 голос
/ 12 августа 2010

Я считаю, что вы должны использовать 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.
0 голосов
/ 12 августа 2010

Экспорт переменных делает их доступными только для дочерних элементов оболочки, из которой они экспортируются. Нет способа изменить переменные среды в родительской оболочке, как вы, похоже, пытаетесь это сделать. Вы можете изменить переменные в той же оболочке, используя скрипт с помощью команды "точка":

. myscript
...