shell不能執行su 後的指令碼

來源:互聯網
上載者:User

標籤:

問題:在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 後的指令碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.