如何在Bash脚本中检查当前用户并切换为指定用户执行后续逻辑
Bash 脚本强制以指定用户运行剩余代码实现方案
直接在你的脚本开头加入以下校验切换逻辑即可:
#!/bin/bash # 配置目标运行用户 TARGET_USER="user1" # 获取当前运行用户 RUN_USER=$(whoami) # 判断是否需要切换用户 if [ "$RUN_USER" != "$TARGET_USER" ]; then # 以目标用户身份重新执行当前脚本,透传所有原始参数 # exec 会直接替换当前进程,切换成功后不会继续执行原进程的后续代码 exec su - "$TARGET_USER" -c "$0 $*" # 执行到此处说明切换失败,抛出错误 echo "切换至用户 $TARGET_USER 失败,请检查权限配置" >&2 exit 1 fi # -------------------------- # 下方为你原有脚本的业务逻辑,会自动以 user1 身份运行 # -------------------------- echo "当前执行用户:$(whoami)" echo "收到的脚本参数:$@"
注意事项
- 如果你当前以 root 身份运行脚本,su 切换普通用户无需输入密码,完全适配你的场景
- 若不需要切换到目标用户的 home 目录、不需要加载目标用户的环境变量,可将
su -修改为su - 若你的环境配置了 sudo 权限,推荐使用更稳妥的参数传递写法,避免带空格/特殊字符的参数解析异常:
exec sudo -u "$TARGET_USER" "$0" "$@" - 需确保脚本对 user1 开放读和执行权限,避免切换后出现权限不足无法执行的问题
内容的提问来源于stack exchange,提问作者Kalyanam Rajashree
相关产品推荐
相关产品推荐

