在Unix Shell Script中切换用户和环境变量

时间:2012-09-19 21:15:41

标签: unix

我目前正在使用

登录其他用户帐户的脚本
su username -c "comand1; comand2" 

shell中没有sudo命令。

但环境变量不会改变。

例如,工作目录因不同用户而异。因此,当用户切换到脚本时,我希望$HOME变量应该包含不同的工作目录。

有谁知道如何解决这个问题?

3 个答案:

答案 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