shell 脚本切换用户执行当前脚本命令

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 同时支持命令和脚本。

至此问题解决

 
 
 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值