2015-07-04 4 views
-1

Я создаю скрипт для извлечения данных из одного БД и вставки строк в другой БД с помощью загрузчика sql. Я разработал все скрипты и скомпилировал их в файле .ksh, и мне нужно запустить файл, но прежде чем мне нужно установить среду для использования файла tnsnames.ora. Ранее, я вручную дает команду SETENV установить окружающую среду, но я попытался установить с помощью команды в файле .kshНевозможно установить среду в оболочке CSH с использованием файла .ksh

set TNS_ADMIN = /abc/tnsnames.ora; export TNS_ADMIN 

но среда не получает набор.

Я начал использовать оболочку, используя #!/bin/ksh, но безрезультатно.

SHELL = /bin/csh 
+0

в оболочке Bourne производное (Корн оболочки, Bash, и т.д.), то 'set' команды, при вызове, как показано, устанавливает' $ 1 'в 'TNS_ADMIN',' $ 2' на '=' и '$ 3' на'/abc/tnsnames.ora'. Экспорт экспортирует пустое значение для 'TNS_ADMIN'. Вам нужно будет использовать 'TNS_ADMIN =/abc/tnsnames.ora; экспортировать TNS_ADMIN' или 'export TNS_ADMIN =/abc/tnsnames.ora', чтобы установить среду. С оболочкой C вы используете 'setenv' для установки среды. В общем, то, что работает в оболочке C, не будет работать в оболочке Bash или Korn, и наоборот. Общий синтаксис ограничен и не включает в себя, в частности, нотации переменных настроек. –

ответ

1

Вы можете использовать этот синтаксис:

#!/bin/ksh 
... 
export TNS_ADMIN=/abc/tnsnames.ora 
... 
someScript.csh 
... 

Обратите внимание, что вы не можете установить csh переменные окружения из соерсед ksh сценария, если это то, что вы пытаетесь сделать. Единственный способ установить csh переменные, когда сценарий (или интерактивный csh оболочки) уже работает является поиске файла, который использует синтаксис csh, а не ksh один, например:

setenv TNS_ADMIN /abc/tnsnames.ora 

Наконец, если у вас нет Я бы посоветовал вам заменить вашу оболочку для входа csh оболочкой POSIX, например ksh или bash. csh и ksh не смешивать вместе.

+0

Я уже пробовал, но не работал. Есть ли способ установить среду csh в скрипт, запустить команду и выйти из среды для остальных команд. – 10hero

+0

Непонятно из вашего вопроса и комментариев, как вы можете взаимодействовать с 'csh' и' kshè. Пожалуйста, обновите свой вопрос с лучшим описанием того, что вы хотите сделать. – jlliagre

+0

Почему неясно? Я ясно упомянул, что после кодирования.ksh-файл, я могу выполнить команду экспорта, но все равно среда sql plus не устанавливается, если только я не выполняю команду setenv TNA_ADMIN /abc/tnsnames.ora – 10hero

0

Вы должны написать настройки, такие как set TNS_ADMIN = /abc/tnsnames.ora, без пробелов вокруг '='. Когда у вас есть файл с такими настройками (назовем его setoracle.ksh), вы должны позаботиться о том, чтобы файл был загружен (читайте в текущей среде, используйте точку для этого).
Теперь у вас есть несколько подходов.

Начать Ksh, источник настройки и вызвать скрипты

ksh 
. setoracle.ksh 
extract_script 

запустить скрипт, который будет запускать другие.

#!/bin/ksh 
if [ $# -ne 1 ]; then 
    echo "Usage: $0 [extract|insert|...]" 
    exit 1 
fi 
. setoracle.ksh 
case $1 in 
    "extract") extract_script;; 
    "insert") insert_script;; 
    *) echo "$1 not supported"; 
esac 

Укажите настройки во всех существующих сценариях.
Старт insert_script и extract_script с

#!/bin/ksh 
. setoracle.ksh 
Смежные вопросы