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


0

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

$su - aba
~> echo $JAVA_HOME

Ausgabe: /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',尽管并不是所有方面都希望如此,因为我仍然只能传输一个命令行。

Answers:


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


好吧,grep是个好主意。我可以解决这个问题。与此同时,我也成功使用了runuser-aba -c命令。
Nils-o-mat 2014年

我会投票给你,但我是新手,并且不允许;-)
Nils-o-mat

找一些Java的东西并回答。我用bash的东西做同样的事情。已经做好了投票阶段,已经在Unix和Linux上发表了评论。
迈克尔汤姆金斯2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.