2011-12-21 109 views
0

我有一個以root身份運行的shell腳本。我希望腳本切換到oracle用戶,運行sqlplus並運行一些.sql文件。 我試圖followung:作爲oracle用戶從作爲根運行的shell腳本運行oracle腳本

su - oracle << -EOF1 2>&1 
     sqlplus $user/$password << -EOF2 
       @oracle.sql; 
       @quartz.sql; 
     EOF2 
EOF1 

首先我得到stty: standard input: Inappropriate ioctl for device的這是什麼意思?

秒,有人可以向我解釋重定向(應該)在這種情況下如何工作?

感謝

回答

2

用途:

if [ "$(id -un)" -eq "root" ]; then 
    exec su - oracle -c $0 
fi 

sqlplus <<EOF 
blablabla 
EOF 

如果你的腳本可能需要的參數,該解決方案將有所不同。

檢查用戶運行的當前是否是root用戶。如果是,則重新執行腳本($0),而不是用戶oracle

但順便說一句,爲什麼腳本首先作爲root運行?

+0

我同意以root身份運行腳本是一種非常糟糕的做法,但我沒有選擇,因爲運行腳本的基礎結構以root身份運行。改變它不是我的電話 – Michael

+0

那麼你的解決方案到底做了什麼? – Michael

+0

查看帖子編輯。你的腳本是否有任何參數? – fge

0

蘇 - 「 '從雙重選擇1; 從雙重選擇2;' 回波| sqlpus/sysdba身份」 預言-c

如果包含「使用以下 蘇 - 預言-c 」回聲\「 選擇1來自雙重; 從雙選擇2 \「| sqlpus/as sysdba」