我正在创建一个脚本,用于从一个DB中提取数据,并使用sql loader将行插入另一个DB。我已经开发了所有脚本并在.ksh文件中编译并且需要运行该文件,但在我需要设置环境以使用tnsnames.ora文件之前。早些时候,我曾手动给setenv命令设置环境,但我尝试使用.ksh文件中的命令进行设置
set TNS_ADMIN = /abc/tnsnames.ora; export TNS_ADMIN
但环境没有设定。
我使用#!/bin/ksh
启动了shell,但没有用。
SHELL = /bin/csh
答案 0 :(得分:1)
您可以使用该语法:
#!/bin/ksh
...
export TNS_ADMIN=/abc/tnsnames.ora
...
someScript.csh
...
请注意,如果您正在尝试执行此操作,则无法从源csh
脚本中设置ksh
个环境变量。在脚本(或您的交互式csh
shell)运行时设置csh
变量的唯一方法是获取使用csh
语法的文件,而不是ksh
一,例如:
setenv TNS_ADMIN /abc/tnsnames.ora
最后,除非你有充分的理由保留它,否则我建议你用csh
或ksh
之类的POSIX shell替换你的登录shell bash
。 csh
和ksh
不会混在一起。
答案 1 :(得分: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