環境変数を追加するにはどうすればよいですか?


364

Ubuntu 11.04を実行しています。ターミナルを使用してbashセッションを開始し、環境変数を追加します。

$r@hajt:~$ env THEVAR=/example

しかし、それは機能していません。それはTHEVARが最後の一つであるとのすべての変数を示し、これに別の呼び出しはenv表示されませんTHEVARanymore-はenv | grep THEVAR何も返しません。

同様に、エクスポート(export THEVAR=/example)または他の変数の割り当て(THEVAR=/example)があるスクリプトは、環境変数を追加しません。

私は何か間違ったことをしていることを知っています、それは単純なものであるべきだと知っていますが、何を見つけることができません。

更新:私の質問の本当の意味はこれでした:https//stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(とにかく、最も投票された回答を選択し、編集されたタイトルのままにします-それは私が尋ねていたものではありませんでした)

env 変更された環境でプログラムを実行し、すべての変更を破棄します。


1
.bashrcで定義/エクスポートすると、正常に機能します。
ハフ


1
どうTHEVAR=/example
オレPrypin

2
もう1つはグローバル変数に関するもので、この1つはそのような制限を追加しません。私はそれを別々にしておきます。
レーケンシュタイン

回答:


570

現在のシェルにのみ変数を設定するに

VARNAME="my value"

現在のシェルと現在のシェルから開始されるすべてのプロセスに設定するには:

export VARNAME="my value"      # shorter, less portable version

今後のすべてのbashセッションで永続的に設定するに.bashrcは、$HOMEディレクトリ内のファイルにそのような行を追加します。

永続的に設定し、システム全体(すべてのユーザー、すべてのプロセス)で/ etc / environmentにset変数を追加します。

sudo -H gedit /etc/environment

このファイルは、次のような変数の割り当てのみを受け入れます。

VARNAME="my value"

exportここではキーワードを使用しないでください。

環境変数の変更を有効にするには、現在のユーザーからログアウトして再度ログインする必要があります。


29
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
SudoSURoot

1
@ Mr.Hydeはい、それはおそらく合理的な場所です
ミシャウシュラジェル

1
@BharadwajRaju。一部の古いUNIXシステムでは、既に設定されている変数のみをエクスポートできるためです。たとえば、古いSolarisおよびHP-UX。
ミチャウシュラージェル

1
環境変数を設定したら、設定を確認するためにすばやく表示するにはどうすればよいですか?
ロッド

1
@Rodecho $myvar
Qwerty

29

環境変数を一度設定するにexportは、シェルスクリプトではなくプロンプトでコマンドを使用します。

$ export THEVAR=/example

この変数は、シェルセッションの残りの部分または設定解除されるまで設定されます。

環境変数を毎回設定するにexportは、.bashrcファイル内のコマンド(またはシェルの適切な初期化ファイル)を使用します。

スクリプトから環境変数を設定するには、スクリプトでexportコマンドを使用してから、スクリプトを使用sourceします。スクリプトを実行すると動作しません。

ソーシングと実行の違いの説明については、この回答を参照してください:https : //superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a- bash-script / 176788#176788


4
スクリプトを実行するだけで機能させるにはどうすればよいですか?調達なし。
ミスリル

19

Ubuntuで新しい環境変数を永続的に追加するには(14.04でのみテスト済み)、次の手順を使用します。

  1. ターミナルを開きます(を押してCtrlAltT
  2. sudo -H gedit /etc/environment
  3. パスワードを入力してください
  4. 開いたばかりのテキストファイルを編集します。
    たとえば、追加する場合は、新しい行にFOO=bar書き込むだけですFOO=bar
  5. それを保存
  6. 保存したら、ログアウトして再度ログインします。
  7. 必要な変更が行われます。

5
sudo geditaskubuntu.com/questions/270006/…を参照)およびについてのより危険な部分を削除して、回答を整理しましたchmod 777。後者は、システム構成ファイルに対して実行しないでください。
ムル14

これは特定の場合の正しい答えです。すべてのセッションは、ユーザーシェルセッションかどうかに関係なく、ここで設定された変数の値を取得します。シェルスクリプトのように見えるかもしれないが、そうではないことに注意することが重要である-それはあなただけ(シェルのような機能を使用して対環境変数を設定することを可能にするiftest)を
トム・ハリソン・ジュニア

barが文字列の場合、引用符で囲む必要がありますか?好きFoo="bar"
blue_chip

@blue_chipいいえ、引用符なしで機能します。
クリック1717年

4
環境変数の@blue_chip、すべてが文字列です。スペースが含まれる場合にのみ引用符が必要です。
ルスラン

8

スクリプトが完了した後も環境/変数の変更を保持するにはsource ./script.sh、ソースの「。」などの短縮表記を使用する必要があります. ./script.sh

ソースは、入力したかのようにスクリプト内のコマンドを実行します...そのため、終了などのスクリプトのいくつかの側面を変更します...たとえば、スクリプトが何かをチェックし、falseの場合は終了することを決定した場合、を呼び出すことでexit 0、現在のターミナル/シェルセッションを終了します。


これは非常に古い質問で、すでに受け入れられている回答と他のいくつかの回答があります...考えて、最近の質問に答えてください...
NerdOfCode

3
@NerdOfCodeこの回答はまだ関連性のある問題に対処するものであり、受け入れられるものを含む他の回答はどれも言及していません。これは推奨されて
Zanna

1
これはまさに私が探していたものです。スクリプトから、エクスポートされた変数を確認する必要がありました。
アルバニックス

5

スクリプトを使用して作業を行う場合、環境変数を永続的に設定する簡単な方法の1つは、スクリプトのステートメントの下に配置することです。

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

pwdのような式を評価する必要がある場合、これを使用できます。たとえば、

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1

私はそれがかなり遅いことを知っていますが、すべてのユーザーに環境変数を追加したい場合(たとえば、JAVAの使用法)-次のことができます:

1)/etc/bash.bashrcnanoを使用して開きます(どんなエディターでも使用できますが、VIMはユーザーフレンドリーになると最悪です。個人的なものはありません)。

2)ファイルに追加します:

export VAR=path export PATH=$PATH:/bin 3)(ボックスをバウンスできる場合は良い)-または単に新しいSSHセッションを開き、「env」コマンドを使用して確認します。

ただし、各ユーザーに個別の設定をしてもらいたい場合は、.bashrc下のファイル~/.bashrc(または/home/$USER/Linuxシステムを初めて使用する場合)に変更(スクリプト化)を行う必要があります。

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