参考:
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

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐