更改用户后继续执行脚本

更改用户后继续执行脚本

我想在更改用户后继续执行脚本,脚本将如下所示

echo "xauth add" `xauth 列表 | grep ${DISPLAY:10:2}` >> test.sh

须藤苏

./test.sh

脚本 test.sh 应该在更改用户后运行,但在“sudo su”之后,命令 ./test.sh 将不会运行。我们能让这成为可能吗

答案1

您无法在脚本中间更改用户身份,然后以新用户身份继续运行脚本。

但是,您可以使用以下命令以其他用户身份执行另一个命令或脚本sudo

sudo ./test.sh

如果需要以另一用户身份运行多个命令,则将这些命令添加到脚本中test.sh,或者,如果只需要运行一两个以上的命令,请使用

sudo sh -c './test.sh; other_command'

sudo一旦sudo正在执行的任何内容终止,控制权就会交还给父脚本(调用的脚本)。

答案2

您可以更改用户中间脚本,但这需要将输入提供给外壳,并且可能无法移植到旧的和可怕的风格),sh并且可能是一个坏主意:

$ cat changemidscript
who am i
sudo -i
who am i
$ bash < changemidscript
jhqdoe   tty??    Oct  5 14:21 
root     tty??    Oct  5 14:21 
$ 

然而!bash changemidscript或者./changemidscript两者的行为都不会与上面相同,这再次表明这是一个坏主意,因为只有通过标准输入提供输入将允许用户更改,然后后续命令将作为新命令用户。 (我有没有提到你可能想使用不同的方式?你应该!)

strace可能有助于说明此方法为何有效; shell 可能会费尽心思逐行读取输入,因此要么以一个字符增量读取(这样它们可以在\n找到 a 时停止读取),要么读入缓冲区,然后将文件句柄返回到下一个字符的开头每行的行,具体取决于\n找到的位置。

答案3

编辑:实际上,您想要执行以下任一操作sudo su -l -c ./test.sh(如果您需要登录 shell)或sudo ./test.sh.

查看su和的手册页sudo

相关内容