如何在 Linux 中永久导出变量?

Posted

技术标签:

【中文标题】如何在 Linux 中永久导出变量?【英文标题】:How to permanently export a variable in Linux? 【发布时间】:2012-10-14 08:09:50 【问题描述】:

我正在运行 RHEL6,并且我已经导出了一个这样的环境变量:

export DISPLAY=:0

当终端关闭时,该变量会丢失。如何永久添加此变量值以使该变量值始终存在于特定用户中?

【问题讨论】:

【参考方案1】:

您可以将其添加到您的 shell 配置文件中,例如$HOME/.bashrc 或更多全球/etc/environment。 添加这些行后,更改不会立即反映在基于 GUI 的系统中,您必须退出终端或创建一个新终端,然后在服务器注销会话并登录以反映这些更改。

【讨论】:

谢谢,这很有帮助。如何在不重新启动的情况下使更改生效? (我是 Linux 新手) @mini-me - 每次打开 shell 时都会拉取 ~/bashrc。要显式加载它,请使用 source 例如- > source ~/.bashrc. @mini-me:进程的环境通常由调用者设置并在进程内部进行更改。从正在运行的进程外部更改 env 是不寻常的,不能使用 export,但 try with a debugger @Mr.Hyde:通常没关系。文件是从上到下解析的,所以如果一个 var 定义依赖于另一个,它们应该相应地排序。所以是的,文件的结尾很好。 请注意 Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. 来自 help.ubuntu.com/community/EnvironmentVariables【参考方案2】:

您必须编辑三个文件来设置永久环境变量,如下所示:

~/.bashrc

当您打开任何终端窗口时,该文件将运行。因此,如果您希望在所有终端窗口中都有一个永久环境变量,您必须在此文件末尾添加以下行:

export DISPLAY=0

~/.profile

bashrc 相同,您必须将提到的命令行放在此文件的末尾,以便在您的操作系统的每次登录中都有您的环境变量。

/etc/环境

如果您希望在每个窗口或应用程序(不仅仅是终端窗口)中都使用环境变量,则必须编辑此文件。在此文件末尾添加以下命令:

DISPLAY=0

注意在这个文件中你不必写export命令

通常您必须重新启动计算机才能应用这些更改。但是您可以通过以下命令在 bashrcprofile 中应用更改:

$ source ~/.bashrc
$ source ~/.profile

但是对于 /etc/environment 你别无选择,只能重启(据我所知)

一个简单的解决方案

我为这些程序编写了一个简单的脚本来完成所有这些工作。您只需设置环境变量的名称和值。

#!/bin/bash
echo "Enter variable name: "
read variable_name
echo "Enter variable value: "
read variable_value
echo "adding " $variable_name " to environment variables: " $variable_value
echo "export "$variable_name"="$variable_value>>~/.bashrc
echo $variable_name"="$variable_value>>~/.profile
echo $variable_name"="$variable_value>>/etc/environment
source ~/.bashrc
source ~/.profile
echo "do you want to restart your computer to apply changes in /etc/environment file? yes(y)no(n)"
read restart
case $restart in
    y) sudo shutdown -r 0;;
    n) echo "don't forget to restart your computer manually";;
esac
exit

将这些行保存在 shfile 中,然后 make it executable 并运行它!

【讨论】:

脚本运行良好。我安装了 Ubuntu 14.04。我只是将上面的内容粘贴到一个空白文件中,将其命名为 insert_var.sh,然后是 chmod -x insert_var.sh,然后是 bash insert_var.sh。谢谢。 我在 Ubuntu 中打开了一个终端窗口并输入 export MY_VAR=1。这个变量 MY_VAR 将存储在哪里? 您的变量MY_VAR 将只是您正在处理的当前shell 的一部分。如果关闭 shell,变量将无法访问。 我在 CentOS 8 上仅使用 /etc/environment 文件测试了该方法,我不需要重新启动我只需要退出(注销)终端或创建一个新终端(登录) .【参考方案3】:

将该行添加到您的.bashrc.profile$HOME/.profile 中设置的变量对当前用户有效,/etc/profile 中的变量是全局变量。 .bashrc 在每次 bash 会话开始时被拉取。

【讨论】:

【参考方案4】:

在 Ubuntu 系统上,使用以下位置:

    JAVA_PATH=/usr/local/java 格式存储在系统范围内的持久变量

    /etc/environment
    

    引用变量的系统范围的持久变量,例如export PATH="$JAVA_PATH:$PATH" 存储在

    /etc/.bashrc
    

    PATH DEFAULT=/usr/bin:usr/local/bin 格式的用户特定持久变量存储在

    ~/.pam_environment
    

有关 #2 的更多详细信息,请查看此 Ask Ubuntu answer。 注意:#3 是 Ubuntu 建议,但在现实世界中可能存在安全问题。

【讨论】:

【参考方案5】:

如果它适合任何人,这里有一些关于永久添加环境变量的简要指南。

vi ~/.bash_profile

将变量添加到文件中:

export DISPLAY=:0
export JAVA_HOME=~/opt/openjdk11

立即应用所有更改:

source ~/.bash_profile

来源:https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-set-environment-variables-in-linux/

【讨论】:

【参考方案6】:

一个具体的例子: 我安装了 Java 7 和 Java 6,我需要使用 6 运行一些构建,其他运行 7。因此我需要动态更改 JAVA_HOME 以便 maven 为每个构建选择我想要的。我做了以下事情:

创建了 j6.sh 脚本,它只是将 JAVA_HOME=... 路径导出到 j6 安装... 然后,正如上面其中一个 cmets 所建议的,每当我需要 J6 进行构建时,我都会在相应的命令终端中运行 source j6.sh。默认情况下,我的JAVA_HOME 设置为 J7。

希望这会有所帮助。

【讨论】:

以上是关于如何在 Linux 中永久导出变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何重新设置linux环境变量

linux环境变量配置

Mac OS X 10.9 - 设置永久环境变量

Linux - 如何添加系统环境变量

如何在 Windows 中使用 shell 脚本永久设置环境变量

Linux如何修改环境变量