为什么这样做有效(以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