我想创建一个脚本:
- 运行一些命令
- 执行 sudo su - [其他用户名]
- 在我退出 [some other username] -> logout 之后
示例: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 ~ ]#
如您所见,脚本运行我的echo命令,然后我sudo su到 root,在那里我可以做我需要做的事情,在我退出 root 会话后,脚本执行最后一个 ( whoami ) 命令。
我的问题是我无法在此脚本末尾注销自己。
我需要一种无需 root 权限即可执行此操作的方法。
有人能帮我吗?
补充说明:
- 当我运行 sudo su - username (userA) 时,我需要提供我的密码 (wolfy) 才能以其他用户 (userA) 的身份登录。然后我在与该用户 (userA) 的整个会话中工作,当我从该用户 (userA) 注销时,我想自动从我的 (wofly) 用户注销。
- 使用 sudo 命令不是一个选项
也许您想做的就是:
这将用脚本替换您当前的 shell 进程,这样当它完成时就没有任何东西可以运行了。
通常,以 root 身份运行命令
sudo
就足够了。如果您出于某种原因坚持使用
su
, 您可以使用 -c 标志:这是结果,在两种情况下都相同:
如果你想进入root shell,使用
sudo -i
随着苏:
如果你想以另一个用户身份运行命令,而不仅仅是 root,你可以使用
sudo -u username command
与相同的想法
su
:脚本中的A
logout
不会影响任何内容,因为它logout
仅适用于登录 shell,并且脚本通常不会作为登录 shell 运行。在我看来,您正在通过 SSH(或其他方式)登录,以另一个用户身份运行并立即注销。在这种情况下,只需源脚本,以便命令在您当前的 shell 中运行。然后,
logout
将工作。或者,您可以使用
exec
,但在那种情况下,它不会logout
生效 -logout
会失败,脚本的结尾只会导致它退出。没有区别的区别,我想。或者,如果您觉得使用起来很麻烦
. ./script
,请定义一个带大括号的函数:大括号中的命令在当前 shell 中运行,括号中的命令在子 shell 中运行。将此添加到您的
.bashrc
,然后您可以简单地执行以下操作: