从以root身份运行的shell脚本中将oracle脚本作为oracle用户运行

时间:2011-12-21 09:36:35

标签: sql linux shell unix

我有一个以root身份运行的shell脚本。我希望脚本切换到oracle用户,运行sqlplus并运行一些.sql文件。 我想跟进:

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

首先,我得到stty: standard input: Inappropriate ioctl for device这是什么意思?

第二,有人可以向我解释在这种情况下重定向(应该)是如何工作的吗?

由于

2 个答案:

答案 0 :(得分:2)

使用:

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

sqlplus <<EOF
blablabla
EOF

如果您的脚本可能接受参数,则解决方案会有所不同。

这是检查运行的用户当前是否为root的原因。如果是,则以用户$0重新执行脚本(oracle)。

但BTW,为什么脚本首先以root身份运行?

答案 1 :(得分:0)

su - oracle -c“echo”从双重中选择1; 从双重中选择2;'| sqlpus / as sysdba“

如果包含'使用以下内容 su - oracle -c“echo \”从双重中选择1; 从dual中选择2; \“| sqlpus / as sysdba”