2015-07-04 30 views
-1

我正在創建腳本以從一個數據庫提取數據並使用sql加載器將行插入另一個數據庫。我開發了所有的腳本並編譯在.ksh文件中,並且需要運行該文件,但是在需要設置使用tnsnames.ora文件的環境之前。此前,我一直在給手動setenv命令來設置環境,但我試圖在.ksh文件無法使用.ksh文件在CSH外殼中設置環境

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

使用命令來設置,但環境是沒有得到設置。

我已經開始使用殼牌#!/bin/ksh但無濟於事。

SHELL = /bin/csh 
+0

在extract_script一個Bourne殼衍生物(Korn外殼,擊等)時,'set'命令,當調用如圖所示,設置'$ 1'到'TNS_ADMIN','$ 2'到'='和'$ 3'到'/ abc/tnsnames.ora'。導出爲'TNS_ADMIN'輸出一個空值。你需要使用'TNS_ADMIN =/abc/tnsnames.ora;導出TNS_ADMIN'或'導出TNS_ADMIN =/abc/tnsnames.ora'來設置環境。使用C shell,您可以使用'setenv'來設置環境。一般來說,在C shell中有效的工具在Bash或Korn shell中不起作用,反之亦然。常用的語法是有限的 - 尤其不包括可變設置符號。 –

回答

1

您可以使用語法:

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

請注意,你不能從一個來源ksh腳本設置csh環境變量,如果它是你正在嘗試做的。設置當腳本(或交互式csh殼)已經運行csh變量的唯一方法是通過獲取使用了csh語法的文件,而不是ksh之一,例如:

setenv TNS_ADMIN /abc/tnsnames.ora 

最後,除非你有強烈的理由保持它,我會建議你用POSIX shell如kshbash替換你的登錄shell cshcshksh不要混在一起。

+0

我已經試過,但沒有工作。有什麼方法可以在腳本中設置csh環境,啓動命令並退出其餘命令的環境。 – 10hero

+0

你的問題和評論並不清楚你期望'csh'和'kshè如何互動。請更新你的問題,更好地描述你想要做什麼。 – jlliagre

+0

爲什麼不清楚?我已經明確提到,在編碼之後。ksh文件,我可以運行導出命令,但仍然沒有設置sql plus環境,除非我手動執行命令setenv TNA_ADMIN /abc/tnsnames.ora – 10hero

0

你應該寫'012'這樣的設置,如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並用

#!/bin/ksh 
. setoracle.ksh