在 Ubuntu 中轻松更改 $JAVA_HOME [关闭]

Posted

技术标签:

【中文标题】在 Ubuntu 中轻松更改 $JAVA_HOME [关闭]【英文标题】:Make $JAVA_HOME easily changable in Ubuntu [closed] 【发布时间】:2011-02-08 23:36:17 【问题描述】:

在 Ubuntu 中,我想在 Java 5 和 6 之间来回切换我的 JAVA_HOME 环境变量。

我打开一个终端并输入以下内容来设置 JAVA_HOME 环境变量:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

在同一个终端窗口中,我键入以下内容以检查环境变量是否已更新:

echo $JAVA_HOME

我看到 /usr/lib/jvm/java-1.5.0-sun 这正是我所期待的。另外,我修改了~/.profile,将JAVA_HOME环境变量设置为/usr/lib/jvm/java-1.5.0-sun。

现在解决问题——当我打开一个新的终端窗口并通过输入 echo $JAVA_HOME 检查我的 JAVA_HOME 环境变量时,我看到我的 JAVA_HOME 环境变量已恢复为 Java 6. 当我重新启动我的机器(或注销并重新登录,我想)时,JAVA_HOME 环境变量设置为 Java 5(可能是因为我在 ~/.profile 中进行了修改)。

有没有办法解决这个问题,这样我就可以更改我的 JAVA_HOME 环境而无需注销并重新登录(并在所有新的终端窗口中更改该环境变量stick)?

【问题讨论】:

正确的网站和重复的答案是什么? ~/.profile 文件仅在您登录 Ubuntu 时读取,因此如果您注销/登录,则为所有终端和您运行的任何其他应用程序设置 JAVA_HOME。如果你在~/.bashrc 中设置了 JAVA_HOME,它只会被从终端运行的应用程序看到。 【参考方案1】:

将环境变量放入全局/etc/environment文件中:

...
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
...

在您希望更新变量的每个 shell 中执行“source /etc/environment”:

$ source /etc/environment

检查它是否有效:

$ echo $JAVA_HOME
$ /usr/lib/jvm/java-1.5.0-sun

太好了,无需注销。

如果你只想在终端设置JAVA_HOME环境变量,在~/.bashrc文件中设置。

【讨论】:

这些更改仍然需要重新启动才能影响通过 Ubuntu UI 启动的应用程序(即双击应用程序) 这与在每个该死的 shell 中设置变量有何不同? 另一种不必每次都手动运行的方法是修改 .bashrc 文件以包含命令“source /etc/environment” @MartinKonicek 您的示例不正确。那条线上不应该有“出口”。 /etc/environment 包含键值对 请记住 /etc/environment is special 并且不允许变量替换,例如JRE_HOME=$JAVA_HOME/jre 不起作用。【参考方案2】:

这可能会解决您的问题: https://help.ubuntu.com/community/EnvironmentVariables

会话范围的环境变量

为了以影响特定用户环境的方式设置环境变量,不应在用户主目录中的特定 shell 脚本文件中放置用于设置其值的命令,而应使用:

~/.pam_environment - 该文件专门用于设置用户的环境。它不是一个脚本文件,而是由赋值表达式组成,每行一个。

不推荐:

~/.profile - 这可能是放置环境变量分配的最佳文件,因为它在启动过程桌面会话期间由 DisplayManager 自动执行,当从文本登录时由登录 shell 自动执行控制台。

【讨论】:

从您提供的链接中:“不推荐使用以下解决方案,但此页面上提供的先前解决方案 (?) 不适用于 10.04 桌面版本。.pam_environment 不会自然地与分发一起处理。 " ~/.pam_environment 如果您假设它处理变量,那么它是一种很棒的登录方式。我尝试将 PATH 设置为 $PATH:$HOME/bin 并且无法评估变量。最终结果:无法登录:(通过访问 Ctrl-Alt-1 并运行“/bin/rm ~/.pam_environment”修复。要格外小心或使用辅助帐户在这里测试设置。 就我个人而言,我不知道他们为什么要费心创建环境文件,然后让它以与以前任何其他设置环境变量的机制完全不同的方式工作。环境文件使用的简单键值对是普通的 BS。我们在环境中使用变量和链接是有原因的,今天它仍然有优点。它简化了管理。无论谁决定 PAM 在这个文件中做事的方式是最好的,他们充其量都是愚蠢的。变量需要被解释。 @AlainO'Dea:我遇到了完全相同的问题。当我无法通过登录屏幕时感到震惊和担心。经过一番挖掘,我发现您可以使用变量,但必须使用不同的语法。例如。 PATH DEFAULT=$PATH:$HOME/bin 当它不使用变量时,一个简单的赋值似乎可以工作。 是的,我同意@AlainO'Dea。如果您的脚本中有任何错误,您将无法登录。保重。【参考方案3】:

试试这些步骤。

--我们要编辑“etc\profile”。 环境变量将在文件底部输入。由于 Ubuntu 没有 授予对根文件夹的访问权限,我们将不得不在终端中使用一些命令

第一步:启动终端。输入指令:gksudo gedit /etc/profile

第 2 步:配置文件文本文件将打开。在页面底部输入环境变量............ 例如: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

export PATH=/home/alex/jdk1.6.0_22/bin:$PATH

第三步:保存并关闭文件。使用 echo 命令检查是否设置了环境变量......例如 echo $PATH

【讨论】:

【参考方案4】:

您需要将变量定义放在~/.bashrc 文件中。

来自 bash 手册页:

当一个交互式外壳是 没有启动登录shell,bash 读取并执行命令 /etc/bash.bashrc 和 ~/.bashrc,如果 这些文件存在。

【讨论】:

【参考方案5】:

传统上,如果您只想更改终端窗口中的变量,请将其设置在 .bashrc 文件中,每次打开新终端时都会获取该文件。 .profile 文件不是每次打开新终端时的来源。

查看有问题的 .profile 和 .bashrc 之间的区别: What's the difference between .bashrc, .bash_profile, and .environment?

.bashrc 应该可以解决您的问题。但是,这不是正确的解决方案,因为您使用的是 Ubuntu。请参阅相关的 Ubuntu 帮助页面“Session-wide environment variables”。因此,难怪.profile 不适合您。我使用 Ubuntu 12.04 和 xfce。我设置了我的.profile,即使我注销再登录它也根本不生效。类似的经验here。所以你可能不得不使用.pam_environment 文件而完全忘记.profile.bashrc。请注意.pam_environment 不是脚本文件。

【讨论】:

【参考方案6】:

看看bash(1),你需要一个登录shell来获取~/.profile,即-l选项。

【讨论】:

【参考方案7】:

我知道这是一个很长很冷的问题,但每次有新的或最近的主要 Java 版本时都会出现。现在这很容易适用于 6 和 7 交换。

我过去曾使用update-java-alternatives 完成此操作: http://manpages.ubuntu.com/manpages/hardy/man8/update-java-alternatives.8.html

【讨论】:

【参考方案8】:

对.profile进行更改后,您需要执行该文件,以使更改生效。

root@masternode# . ~/.profile

完成后,回显命令将起作用。

【讨论】:

你应该使用~/.profile而不是./.profile

以上是关于在 Ubuntu 中轻松更改 $JAVA_HOME [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JAVA_HOME 在 Ubuntu 上没有正确定义?

Linux中root用户找不到JAVA_HOME

为啥我不能在 Ubuntu 12.04 中设置 JAVA_HOME VARIABLE?

如何更改 ant 的 JAVA_HOME?

[转]Linux中root用户找不到JAVA_HOME

在没有管理员权限的情况下更改 Windows 10 中的 Java_Home 路径