在 Bash 脚本中更改用户和环境

在 Bash 脚本中更改用户和环境

为什么这样做有效(以root身份):

$su - aba
~> echo $JAVA_HOME

出处:/usr/java/jdk1.7.0_45

而不是这个 shell 脚本(也以 root 身份运行):

#!/bin/bash
su - aba << EOF
echo $JAVA_HOME > tmp
EOF

输出:

$more tmp

$

问题: 我该如何实现呢?或者更好的是:我的目标是以另一个用户的身份执行一些命令,并使用该用户的环境,甚至可能更改他的环境(只是暂时的)。

编辑 与此同时,我成功了runuser - aba -c 'echo JAVA_HOME',尽管它并不像所希望的那样,因为我仍然只能传输一个命令行。

答案1

su - aba

是缩写

su --login ada

这在脚本中是没有意义的。由于您没有终端,因此一旦运行,它就会返回到上一个用户(root)。

尝试

su -c "echo $JAVA_HOME" ada

但即使这样也无法运行用户的.profile或.bashrc。

但是您是 root 身份,您应该能够解析这些文件以获得正确的设置。

例如。

TEMP_JAVA=$(grep JAVA_HOME /home/$USER/.bashrc)
JAVA_HOME=${TEMP_JAVA##*=} echo $JAVA_HOME

相关内容