我想创建一个脚本:
- 运行一些命令
- 执行 sudo su - [其他用户名]
- 退出 [其他用户名] 后 -> 注销
例如:test.sh
echo "test script"
sudo su
logout
如果我运行这样的脚本:
echo "test"
sudo su
whomai
我得到了想要的结果:
[wolfy@ubuntusrv ~ ]# ./test.sh
test
[root@ubuntusrv wolfy]# date
Fri 19 Jun 10:56:52 CEST 2015
[root@ubuntusrv wolfy]# echo bla
bla
[root@ubuntusrv wolfy]# exit
wolfy
[wolfy@ubuntusrv ~ ]#
正如你所见,脚本运行了我的回声命令然后我须藤苏到 root,我可以在那里做我需要做的事情,在我退出 root 会话后,脚本执行最后一个(我是谁) 命令。
我的问题是我无法在该脚本结束时自行注销。
我需要一种无需 root 权限即可执行此操作的方法。
有人能帮我吗?
补充说明:
- 当我运行 sudo su - username (userA) 时,我需要提供我的密码 (wolfy) 才能以其他用户 (userA) 身份登录。然后,我会与该用户 (userA) 进行整个会话,当我从该用户 (userA) 注销时,我希望自动从我的 (wofly) 用户注销。
- 使用 sudo 命令不是一个选项
答案1
也许你想做的就是:
exec ./test.sh
这将用脚本替换您当前的 shell 进程,以便当它完成时就没有任何内容可运行。
答案2
通常,以 root 身份运行命令sudo
就足够了。
#!/bin/bash
echo test
sudo whoami
如果您出于某种原因坚持使用su
,您可以使用 -c 标志:
#!/bin/bash
echo test
sudo su -c whoami
以下是两种情况下的结果:
$ ./test.sh
test
[sudo] password for xieerqi:
root
如果你想进入 root shell,请使用sudo -i
serg@ubuntu[/home/xieerqi]
$ sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi]
$
使用 su :
serg@ubuntu[/home/xieerqi]
$ sudo su -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
root@anaconda:/home/xieerqi# date
Fri Jun 19 12:41:06 EEST 2015
root@anaconda:/home/xieerqi# echo blah
blah
root@anaconda:/home/xieerqi# exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi
如果你想以其他用户(不仅是 root 用户)的身份运行命令,你可以使用sudo -u username command
$ sudo -u testuser whoami
testuser
相同的想法su
:
serg@ubuntu[/home/xieerqi]
$ sudo su -c bash testuser
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
testuser@anaconda:/home/xieerqi$ whoami
testuser
testuser@anaconda:/home/xieerqi$ exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi
答案3
脚本中的Alogout
不会影响任何内容,因为它logout
仅适用于登录 shell,而脚本通常不作为登录 shell 运行。
在我看来,您是通过 SSH(或其他方式)登录的,以另一个用户身份运行,然后立即注销。在这种情况下,只需获取脚本,以便命令在您当前的 shell 中运行。然后,logout
就可以了。
或者,您可以使用exec
,但在这种情况下,它不会logout
生效 -logout
会失败,并且脚本的结尾只会使其退出。我想,没有区别。
或者,如果你发现使用很麻烦. ./script
,可以用括号定义一个函数:
switchuser () {
echo "test script"
sudo su -
exit
}
括号中的命令在当前 shell 中运行,圆括号中的命令在子 shell 中运行。将其添加到您的.bashrc
,然后您只需执行以下操作:
switchuser