文章目录
shell 脚本切换用户执行命令
问题背景:
在使用公司平台执行一个
informix
查询的shell
脚本时,平台默认使用root
,但是在具体情况下,使用root
会出现一些特别的权限及路径问题,在没使用平台的情况下,是切换指定用户之后执行的脚本。
问题需求:
在使用平台执行脚本时默认使用
root
这里没有办法修改,所以就需要在脚本中切换用户,切换用户之后继续执行余下的脚本内容。就类似于在脚本的开头第一行执行su - username
之后,脚本中余下的所有命令都是在username
这个用户下执行的。类似这种概念。因为是平台执行的脚本,平台执行的时候只能是一个脚本,所以不能使用su - username -s "xxx.sh"
在脚本中调用另外一个脚本,而且脚本会有很多内容,所以使用-c <<EOF
这种也不合适。
问题解决:
#!/bin/bash
userName=`whoami`
echo $userName
echo 000
if [ $userName == "root" ]; then
su - user1 -s "$(realpath $0)"
exit
fi
echo 111
pwd
echo 222
解决思路:如上面
demo
脚本所示,在执行脚本时判断当前用户,如果是root
用户,则执行su - username -s "xxx.sh"
,$(realpath $0)
则表示当前脚本的绝对路径,即如果是root
就切换用户重新执行这个脚本。
问题:
如果上面的在切换时出现的 last login
登陆信息会影响解析结果,则可以尝试如下写法
#!/bin/bash
userName=`whoami`
echo $userName
echo 000
if [ $userName == "root" ]; then
# ./test.txt 路径自定义
su - user1 -s "$(realpath $0)" &>./test.txt
exit
fi
echo 111
pwd
echo 222
总结:
注:本次测试是在 linux
系统中测试得到结果,如果是 aix
系统,目前测试不支持 su - username -s "xxx.sh"
,可以使用 su - username -c "scriptPath脚本路径"
,在 aix
中 -c
同时支持命令和脚本。
至此问题解决