我目前正在编写一个脚本,该脚本使用
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"
有两个问题:
第一:如果您"为参数划界,则此参数中的所有内容都由调用-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