2

我目前正在编写一个脚本,该脚本使用

su username -c "comand1; comand2" 

shell中没有sudo命令。

但是环境变量不会改变。

例如,不同用户的工作目录不同。所以当用户在脚本中切换时,我希望$HOME变量应该包含不同的工作目录。

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

4

3 回答 3

3

您可能正在寻找-l(或只是-)选项以使其成为登录外壳。参见手册su(1)

于 2012-09-19T21:26:22.667 回答
0

一种 hack-ish 方式是将env第二个用户的所有变量放在一个文件中(如.bashrc),并在命令列表中首先获取它:

su username -c "source file_name; comand1; comand2" 
于 2012-09-19T21:28:58.007 回答
0

有两个问题:

第一:如果您"为参数划界,则此参数中的所有内容都由调用-cshell扩展,而不是由执行的 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
于 2012-09-23T11:03:04.117 回答