shell不能执⾏su后的脚本
问题:在shell脚本中执⾏“su – ⽤户名”后,脚本终⽌执⾏,并且切换到su 中指定⽤户名的交互式界⾯
现象:我在root中执⾏⼀个脚本,但是其中的⼀些命令或脚本必须⽤oracle⽤户来执⾏。,
[root@HZ-ITF-01 cron.d]# vi /data/itf/app/oracle/sync/test.sh
#!/bin/bash
set -x
su - oracle
sqlplus /nolog <<EOF
conn hxy/hxy
create table test1 as select * from dba_tables;
exit
EOF
在root⽤户下执⾏sh /data/itf/app/oracle/sync/test.sh后,停⽌在oracle⽤户的交互界⾯不在往下执⾏,需要⼿动输⼊exit才能继续,但是在脚本中加⼊exit也不好使
分析:
a、su – 之后就直接切换环境并且等待⽤户的交互式访问了,不在继续执⾏脚本中的命令
b、su后的bash是⼀个⼦shell,脚本⾥写exit没有⽤,这些都要等su这个进程结束后才会执⾏。
解决⽅案: su – ⽤户 -c 命令shell界面
或者
sudo -u ⽤户命令参考⽰例:参考资料: Shell 中切换⽤户
然后脚本修改成下⾯的⽅式
#!/bin/bash
#set -x
su - oracle -c sqlplus /nolog <<EOF
conn hxy/hxy
create table test1 as select * from dba_tables;
exit
EOF
脚本顺利执⾏
或者改成:
#!/bin/bash
set -x
su - oracle <<!
sqlplus /nolog <<EOF
conn hxy/hxy
create table test1 as select * from dba_tables;
exit
EOF
!
也可以顺利执⾏

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。