2012-07-13 39 views
11

我有一个运行的JAR文件在Linux中bash脚本。当登录作为一个普通用户,我没有运行该脚本的权限,但它打印以下日志:JAVA_HOME没有发现因为须藤

*INFO * Using JVM found at /opt/jdk6/bin/java 

当我尝试使用脚本须藤虽然,它给:

*ERROR* Unable to locate java, please make sure java is installed and JAVA_HOME set 

我已将JAVA_HOME设置为上述相同路径 - 可以通过echo $JAVA_HOME &将其设置为脚本中的选项。我很高兴脚本不是问题 - 这是一个默认的CQ5控制脚本&我在其他几十个盒子上使用它没有问题。只是不确定我在做什么错以上&假设这是我想念的东西重新Linux设置?

当我运行sudo命令时,它是否有权访问我设置为我自己的JAVA_HOME

+1

什么是'回声$ JAVA_HOME'的既作为根和普通用户的精确输出? – 2012-07-13 11:08:39

+0

安德鲁,我没有作为root用户本身在机器上访问(不是系统管理员),只是作为一个sudoer。刚刚发现了这里的问题,但:http://unix.stackexchange.com/questions/6127/java-home-not-set-in-script-when-run-using-sudo须藤被剥离的环境变量,它管理与'须藤-E'标志 – anotherdave 2012-07-13 11:13:56

+1

我认为这取决于发行 - 一些sudos保持ENVS,别人不 – Raz 2012-07-13 11:13:57

回答

24

默认情况下,sudo将清理催生命令的环境。通过-E留着,

sudo -E env 

对比:

sudo env 
+0

感谢队友,只是发现它unix.stackexchange在同一时间:) – anotherdave 2012-07-13 11:15:35

1

“命令-E” 没有导出JAVA_HOME时没有解决的问题。当它被导出时,没有-E的“sudo”的工作原理也是一样的。

所以,你可以在你的.bash_profile和.bashrc文件添加export JAVA_HOME=.../jdk<version>

如果你想知道什么的.bash_profile和.bashrc中的差异,.bash_profile是在登录时(例如,表现出一定的诊断/欢迎信息)执行。 .bash_rc在您打开一个新终端时执行(例如,shift-ctrl-T)。

为了运行这两种情况下一些命令,你可以把它放在.bashrc文件,并让.bash_profile文件来源的.bashrc:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi 
0

你可能永远都只是把它传递到Java明确的是这样的:

sudo java -Djava.home=$JAVA_HOME Test