无法使用.ksh文件在CSH shell中设置环境

时间:2015-07-04 22:07:44

标签: oracle shell plsql ksh sql-loader

我正在创建一个脚本,用于从一个DB中提取数据,并使用sql loader将行插入另一个DB。我已经开发了所有脚本并在.ksh文件中编译并且需要运行该文件,但在我需要设置环境以使用tnsnames.ora文件之前。早些时候,我曾手动给setenv命令设置环境,但我尝试使用.ksh文件中的命令进行设置

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

但环境没有设定。

我使用#!/bin/ksh启动了shell,但没有用。

SHELL = /bin/csh

2 个答案:

答案 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

最后,除非你有充分的理由保留它,否则我建议你用cshksh之类的POSIX shell替换你的登录shell bashcshksh不会混在一起。

答案 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