2011-12-21 107 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”