私はUbuntu 11.04を使用しています。ターミナルを使ってbashセッションを開始し、環境変数を追加したいと思っています。
$r@hajt:~$ env THEVAR=/example
しかし、これがうまくいきません。すべての変数が表示され、THEVARが最後に表示されますが、env
を再度呼び出してもTHEVAR
はもう表示されません-env | grep THEVAR
は何も返しません。
同様に、export (export THEVAR=/example
) や他の変数の割り当て (THEVAR=/example
) を行ったスクリプトでは、環境変数が追加されません。
何か間違ったことをしているのはわかっていますし、簡単なことのはずなのですが、どうしてもそれがわかりません。
UPDATEです。 私の質問の本当の意味は、この質問でした。https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell
(とりあえず、最も投票された回答を選び、編集されたタイトルはそのままにしておきます。これは私が聞きたかったことではありません)
env` は、変更された環境でプログラムを実行し、その後、変更をすべて解除します。
現在のシェルにのみ変数を設定します。
VARNAME="my value"
現在のシェルと、現在のシェルから起動したすべてのプロセスに設定するには、次のようにします。
export VARNAME="my value" # shorter, less portable version
今後のすべてのbashセッションで永続的に設定するには、$HOME
ディレクトリの.bashrc
ファイルにこのような行を追加します。
恒久的にシステム全体(すべてのユーザー、すべてのプロセス)に設定するには、/etc/environmentにset変数を追加します。
sudo -H gedit /etc/environment
このファイルは、次のような変数の割り当てしか受け付けません。
VARNAME="my value"
ここでは export
キーワードを使用しないでください。
環境変数の変更が行われるためには、現在のユーザーからログアウトし、再度ログインする必要があります。
環境変数を一度だけ設定するには、シェルスクリプトではなくプロンプトで export
コマンドを使用します。
$ export THEVAR=/example
この変数は、シェルセッションの残りの期間、または設定が解除されるまで設定されます。
環境変数を毎回設定するには、.bashrc
ファイル(またはシェルの適切な初期化ファイル)で export
コマンドを使用します。
スクリプトから環境変数を設定するには、スクリプトの中で export
コマンドを使用し、スクリプトを source
します。スクリプトを実行しても動作しません。
ソースと実行の違いについての説明は、この回答を参照してください: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788
Ubuntuで新しい環境変数を恒久的に追加するには(14.04でのみテスト済み)、以下の手順で行います。
1.ターミナルを開く(CtrlAltT を押す)。
2.2. 「sudo -H gedit /etc/environment」を実行する。
3.パスワードを入力する
4.開いたばかりのテキストファイルを編集します。
例:FOO=bar
を追加したい場合は、FOO=bar
と改行してください。
5.5. ファイルを保存する
8.保存したら、一度ログアウトして、再度ログインしてください。
9.必要な変更が行われます。