Linuxで変数を永続的にエクスポートする方法は?


155

RHEL6を実行していて、次のような環境変数をエクスポートしました。

export DISPLAY=:0

端末が閉じられると、その変数は失われます。これを永続的に追加して、この変数値が特定のユーザーに常に存在するようにするにはどうすればよいですか?

回答:


171

これをシェル構成ファイルに追加できます。たとえば$HOME/.bashrc、でグローバルに追加できます/etc/environment。これらの行を追加した後、変更はGUIベースのシステムにすぐには反映されません。ターミナルを終了するか、新しいものを作成し、サーバーでセッションをログアウトしてログインし、これらの変更を反映する必要があります。


3
ありがとう、それは役に立ちます。再起動せずに変更を有効にするにはどうすればよいですか?(私はLinux初心者です)
Bitterblue 2013年

5
@ mini-me-シェルを開くたびに〜/ bashrcがプルされます。明示的にロードするには、source例えば-を使用します> source ~/.bashrc
kostja 2013年

@kostjaすべての新しいシェルについて?それらの環境変数を変更する前にeclipseを実行していて、eclipseで変数を変更したい場合、eclipseを再起動する必要がありますか?
Bitterblue 2013年

1
@ mini-me:プロセスの環境は通常、呼び出し元によって設定され、プロセス内から変更されます。実行中のプロセスの外側からenvを変更することは珍しく、では実行できませんexport、デバッガーで試してください
Antoine

1
@ Mr.Hyde:通常は関係ありません。ファイルは上から下に解析されるため、var定義が別の定義に依存する場合は、それに応じて順序付けする必要があります。はい、ファイルの最後は問題ありません。
Antoine

120

次のように永続的な環境変数を設定するには、3つのファイルを編集する必要があります。

  • 〜/ .bashrc

    端末ウィンドウを開くと、このファイルが実行されます。したがって、すべてのターミナルウィンドウで永続的な環境変数を使用する場合は、このファイルの最後に次の行を追加する必要があります
    。export DISPLAY = 0

  • 〜/ .profile

  • bashrcと 同じように、OSのすべてのログインで環境変数を使用するには、このファイルの最後に上記のコマンドラインを配置する必要があります。

  • / etc / environment

  • (ターミナルウィンドウだけでなく)すべてのウィンドウまたはアプリケーションで環境変数が必要な場合は、このファイルを編集する必要があります。このファイルの最後に次のコマンドを追加します
    。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.shbash insert_var.shありがとう。
    Brunno Vodola Martins

    Ubuntuでターミナルウィンドウを開き、export MY_VAR = 1と入力しました。この変数MY_VARはどこに保存されますか?
    vgokul129

    29

    .bashrcまたはに行を追加します.profile。で設定された変数$HOME/.profileは現在のユーザーに対してアクティブであり、変数/etc/profileはグローバルです。.bashrc各bashのセッション開始に引かれます。


    27

    Ubuntuシステムでは、次の場所を使用します。

    1. JAVA_PATH=/usr/local/java格納形式のシステム全体の永続変数

      /etc/environment
      

    2. export PATH="$JAVA_PATH:$PATH"store in などの変数を参照するシステム全体の永続変数

      /etc/.bashrc
      
    3. PATH DEFAULT=/usr/bin:usr/local/bin格納形式のユーザー固有の永続変数

      ~/.pam_environment
      

    #2の詳細については、このAsk Ubuntu answerを確認してください 。注:#3はUbuntuの推奨事項ですが、現実世界ではセキュリティ上の懸念があるかもしれません。


    2

    特定の例:Java 7とJava 6をインストールし、6でいくつかのビルドを実行し、他は7で実行する必要があります。したがってJAVA_HOME、Mavenが各ビルドに必要なものを取得するように動的に変更する必要があります。私は次のことをしました:

    • j6.sh単にJAVA_HOME=...j6インストールへのエクスポートパスを実行するスクリプトを作成しました...
    • 次に、上記のコメントの1つで示唆されているように、ビルドにJ6が必要なときはいつでもj6.sh、それぞれのコマンドターミナルでソースを実行します。デフォルトでは、my JAVA_HOMEはJ7に設定されています。

    お役に立てれば。


    弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.