##感謝haoxiaoyu
https://www.cnblogs.com/haoxiaoyu/p/4302663.html
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 命令
或者
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
!
也可以順利執行
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 命令
或者
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
!
也可以順利執行