参考:
https://blog.csdn.net/linucle/article/details/43967237
https://blog.csdn.net/muyimo/article/details/75259322
https://stackoverflow.com/questions/27340283/how-to-execute-multiple-commands-after-sudo-command
在linux下执行shell时,如果有需要切换用户(sudo su - 用户名)后,在执行一些命令行程序,切换后,
发现后面的命令都不执行了,脚本终止执行,需要手动输入exit才能继续,但是在脚本中加入exit也不好使,
分析:
a、su – 之后就直接切换环境并且等待用户的交互式访问了,不在继续执行脚本中的命令
b、su后的bash是一个子shell,脚本里写exit没有用,这些都要等su这个进程结束后才会执行。
解决方案: su – 用户 -c 命令
或者
sudo -u 用户 命令 参考示例: 参考资料: Shell 中切换用户
!/bin/bash
set -x
su - oracle << block
sqlplus /nolog << EOF
conn hxy/hxy
create table test1 as select * from dba_tables;
exit
EOF
block
// 或者
// user1, user2
//此shell在user1下执行
!/bin/bash
// 需要切换到user2
sudo su - user2 -c ’
// 这里环境变量已经切换成 user2
whoami
env|egrep "USER|MAIL|LOGNAME|PWD"
// other command
‘
// 如果单引号 ‘换成 “,则环境变量仍然为 user1
sudo su - user2 -c ”
// 这里环境变量是 user1
whoami
env|egrep "USER|MAIL|LOGNAME|PWD"
// other command
“