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


154

我正在运行RHEL6,并且已导出如下环境变量:

export DISPLAY=:0

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

Answers:


170

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


3
谢谢,这很有帮助。如何使更改在不重新启动的情况下生效?(我是Linux新手)
Bitterblue

5
@ mini-me-每次打开外壳程序时都会拉〜/ bashrc。要显式加载它,请使用sourceeg- > source ~/.bashrc
kostja

@kostja是否需要所有外壳?如果在更改这些env变量之前运行了eclipse,并且希望eclipse更改了vars,是否必须重新启动eclipse?
Bitterblue

1
@ mini-me:进程的环境通常由调用者设置,并在进程内部进行更改。从正在运行的进程外部更改环境是不常见的,并且不能用export,但是请尝试使用调试器
Antoine

1
@海德先生:通常没关系。文件是从上到下解析的,因此,如果一个var定义依赖于另一个,则应相应地对它们进行排序。所以是的,文件结尾很好。
Antoine 2015年

120

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

  • 〜/ .bashrc

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

  • 〜/ .profile

  • bashrc相同,您必须在文件的末尾放置提到的命令行,以使环境变量出现在操作系统的每次登录中。

  • / etc /环境

  • 如果要在每个窗口或应用程序(而不仅仅是终端窗口)中使用环境变量,则必须编辑此文件。在此文件的末尾添加以下命令:
    DISPLAY = 0
    注意,在此文件中,您不必编写导出命令

通常,您必须重新启动计算机才能应用此更改。但是您可以通过以下命令在bashrc配置文件中应用更改:

$ 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中,然后使其可执行并运行它!


    1
    该脚本效果很好。我已经安装了Ubuntu 14.04。我只是将上面的内容粘贴到一个空白文件中,命名为insert_var.sh,然后是chmod -x insert_var.sh,然后是bash insert_var.sh。谢谢。
    Brunno Vodola Martins,2016年

    我在Ubuntu中打开终端窗口,然后输入export MY_VAR = 1。此变量MY_VAR将存储在哪里?
    vgokul129

    29

    将行添加到您的.bashrc或中.profile。设置的变量$HOME/.profile对于当前用户是活动的,其中的变量/etc/profile是全局的。该.bashrc拉各的bash会话开始。


    27

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

    1. 系统范围内的持久变量,格式为JAVA_PATH=/usr/local/javastore in

      /etc/environment
      
    2. 系统范围内的持久变量,引用诸如以下变量的
      export PATH="$JAVA_PATH:$PATH"存储

      /etc/.bashrc
      
    3. 用户特定的持久变量,格式为PATH DEFAULT=/usr/bin:usr/local/binstore in

      ~/.pam_environment
      

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


    2

    一个特定的示例:我安装了Java 7和Java 6,我需要运行一些版本为6的构建,而其他版本需要运行7。因此,我需要动态更改,JAVA_HOME以便maven可以为每个构建选择所需的内容。我做了以下事情:

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

    希望这可以帮助。


    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.