我目前正在使用
登录其他用户帐户的脚本su username -c "comand1; comand2"
shell中没有sudo
命令。
但环境变量不会改变。
例如,工作目录因不同用户而异。因此,当用户切换到脚本时,我希望$HOME
变量应该包含不同的工作目录。
有谁知道如何解决这个问题?
答案 0 :(得分:3)
您可能正在寻找-l
(或仅-
)选项以使其成为登录shell。请参阅su(1)
手册。
答案 1 :(得分:0)
一种hack-ish方式是将第二个用户的所有env
个变量放在一个文件中(如.bashrc
),并在命令列表中首先获取它:
su username -c "source file_name; comand1; comand2"
答案 2 :(得分:0)
有两个问题:
首先:如果您使用"
来分隔-c
的参数,则此参数中的所有内容都由调用 shell扩展,而不是由执行的shell扩展。您可以使用'
代替"
来阻止此操作。
第二:默认情况下,su
执行的操作与实际用户登录时的步骤不同。使用-l
或-
选项。在您的情况下可能需要这样做 - 只需尝试一下。
合:
> echo $HOME
/root
> su -c "echo $HOME" user -l
/root
> su -c 'echo $HOME' user -l
/home/user
> su -c 'echo $HOME' user
/home/user