標籤:
問題:在shell指令碼中執行“su – 使用者名稱”後,指令碼終止執行,並且切換到su 中指定使用者名稱的互動式介面 現象:我在root中執行一個指令碼,但是其中的一些命令或指令碼必須用oracle使用者來執行。,
[[email protected]01 cron.d]# vi /data/itf/app/oracle/sync/test.sh #!/bin/bashset -xsu - oraclesqlplus /nolog <<EOFconn hxy/hxycreate table test1 as select * from dba_tables;exitEOF
在root使用者下執行sh /data/itf/app/oracle/sync/test.sh後,停止在oracle使用者的互動介面不在往下執行 ,需要手動輸入exit才能繼續,但是在指令碼中加入exit也不好使
分析: a、su – 之後就直接切換環境並且等待使用者的互動式訪問了,不在繼續執行指令碼中的命令 b、su後的bash是一個子shell,指令碼裡寫exit沒有用,這些都要等su這個進程結束後才會執行。 解決方案: su – 使用者 -c 命令 或者 sudo -u 使用者 命令 參考樣本: 參考資料: Shell 中切換使用者 然後指令碼修改成下面的方式
#!/bin/bash#set -x
su - oracle -c sqlplus /nolog <<EOFconn hxy/hxycreate table test1 as select * from dba_tables;exitEOF
指令碼順利執行
或者改成:
#!/bin/bashset -x
su - oracle <<!sqlplus /nolog <<EOFconn hxy/hxycreate table test1 as select * from dba_tables;exitEOF
!
也可以順利執行
shell不能執行su 後的指令碼