2017-06-02 82 views
0

您好我正在編寫一個小的shell腳本,它將從數據庫中的.ctl文件加載數據,但不應該在執行腳本後在屏幕上顯示輸出,因爲它很關鍵,只是想要確認這是否是正確與否:在shell腳本中運行sqlldr

#!/bin/ksh 

Y=`sqlldr usr/[email protected] control = /work/ctlm/SCRIPTS/upload.ctl` 
echo $Y > sqlldr_1 
rm -rf sqlldr_1 
+0

是否有任何理由將輸出傳遞給變量,爲什麼不直接重定向。爲什麼要寫入一個文件,然後刪除它? –

+0

執行腳本後,我不希望sqlldr的輸出顯示在屏幕上,我該怎麼辦? – User123

+0

在屏幕上你有2個輸出流:標準輸出和標準錯誤,如果你不想輸出,使用重定向;我的回答中的例子 –

回答

1

在外殼的空間是用來分隔參數,圍繞=刪除它們。 也使用變量$ Y的引號來保存格式(空格,換行符)。

#!/bin/ksh 

Y=`sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl` 
echo "$Y" > sqlldr_1 
rm -rf sqlldr_1 

如果你不希望任何輸出到屏幕上,然後使用重定向

例如,刪除輸出

sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl >/dev/null 2>&1 

要創建2個文件out.log和err.log

sqlldr usr/[email protected] control=/work/ctlm/SCRIPTS/upload.ctl >out.log 2>err.log 

fd 1是隱含的,>out.log1>out.log相同可以在>和文件名 之間添加空格,但文件描述符和>之間不得有空格

+0

謝謝。很好的解釋。這兩個工作對我來說:-) – User123

+0

我們可以直接使用控制= upload.ctl像下面一樣:'sqlldr usr/passwd @ DB control = upload.ctl'或者我們必須提供像我在我的原始文章中提到的整個路徑? – User123

+0

是的,也許取決於你目前的工作目錄,你可以試試。另外不要忘記投票並標記爲已回答。 –