我的目标是通过 su 进入 user2,运行引用 user1 环境的命令,并以 user2 身份启动交互式 shell。我正在尝试创建一个函数,允许我在 su 到另一个用户后继续转发 X。
以下命令按预期工作,但 bash 出现严重错误:
sudo su - user2 -c "export DISPLAY=$orig_display; xauth add $orig_xconfig ; bash"
$orig_display 和 $orig_xconfig 参数是存在于 user1 环境中的预定义参数。
本质上,我想将 su 的 -c 和 -l 标志结合起来,但它们似乎是互相排斥的。
答案1
我认为你所说的“极端错误”主要是因为man 1 su
以下内容-c
:
执行的命令将没有控制终端。
分两步进行。
为user2设置X权限文件:
sudo -u user2 xauth add $orig_xconfig # or # sudo su user2 -c "xauth add $orig_xconfig"
运行 shell。注意
su -
保留$DISPLAY
;sudo -i
也应该保留$DISPLAY
。因此:DISPLAY="$orig_display" sudo -i su -s /bin/bash - user2
您的原始代码试图运行,
bash
无论 user2 的默认 shell 是什么,所以我使用了-s /bin/bash
。您可能想要也可能不想要它。