我目前正在编写一个脚本,该脚本使用
su username -c "comand1; comand2"
shell中没有sudo
命令。
但是环境变量不会改变。
例如,不同用户的工作目录不同。所以当用户在脚本中切换时,我希望$HOME
变量应该包含不同的工作目录。
有谁知道如何解决这个问题?
我目前正在编写一个脚本,该脚本使用
su username -c "comand1; comand2"
shell中没有sudo
命令。
但是环境变量不会改变。
例如,不同用户的工作目录不同。所以当用户在脚本中切换时,我希望$HOME
变量应该包含不同的工作目录。
有谁知道如何解决这个问题?
您可能正在寻找-l
(或只是-
)选项以使其成为登录外壳。参见手册su(1)
。
一种 hack-ish 方式是将env
第二个用户的所有变量放在一个文件中(如.bashrc
),并在命令列表中首先获取它:
su username -c "source file_name; comand1; comand2"
有两个问题:
第一:如果您"
为参数划界,则此参数中的所有内容都由调用-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