ユーザーの環境変数を設定するにはどうすればいいですか?(セッションではなく永続的に)

これは私を苛立たせます。いくつかの提案(すべて異なるファイルと構文を使用)を見ましたが、どれもうまくいきませんでした。

特定のユーザのために環境変数を設定するにはどうしたらいいですか?私は debian squeeze を使用しています。 ABC = "123" とするためには、ファイルにどのような構文を書けばよいのでしょうか?

ソリューション

この宣言は、シェルの初期化ファイルに記述する必要があります。

  • bash, ash, ksh などの Bourne スタイルのシェルを使用している場合は

     ABC="123"; export ABC

.profile ファイル (${HOME}/.profile) に追加することができます。これはほとんどのUnix、特にDebianではデフォルトの状態です。

ログインシェルが bash の場合は、代わりに .bash_profile (${HOME}/.bash_profile) または .bash_login を使用することができます。

注意: これらのファイルのいずれかが存在し、ログインシェルが bash の場合、ssh やテキストコンソールでログインしたときには .profile は読み込まれませんが、GUI でログインしたときには .bash_profile の代わりに読み込まれる可能性があります。また、.bash_profileがない場合は、.bashrcを使います。

  • zshをログインシェルとして設定している場合は、~/.profileの代わりに~/.zprofileを使用してください。

  • tcshを使用している場合は、以下を追加してください。

     setenv ABC "123"

.loginファイル(${HOME}/.login`)に

  • 他のシェルを使用している場合は、環境変数の定義方法やシェルの起動時に実行されるファイルをシェルのマニュアルで確認してください。
解説 (12)

これは、ほとんどすべてのシェルで使用できる一般的な手順です。いずれにしても、ユーザーが通常どのシェルでログインしているかを知る必要があります。

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

次に、このシェルが通常読むであろうドットファイルを把握する必要があります。

man $shell

シェル名を含むドットファイルをリストアップするのが近道かもしれません。

ls ~/.*${shell}*

これらのファイルがログイン時に実際に読み込まれているかどうかを確認したい場合は、単純にそれぞれのファイル名を表示します。

echo .bashrc

ログイン時に、どのファイルが読み込まれているかを確認し、どのファイルを修正するかを決定することができます。ただし、echo "$0" などを使ってはいけません。$0 の値はシェルがドットファイルをどのように処理するかに依存しており、誤解を招く可能性があるからです。

変数を恒久的に宣言する場合、これはセッションにしか適用されないことに注意してください。セッションなしで変数の値にアクセスする方法はありませんので、セッション外では意味を持ちません。read-only"という意味であれば、それはシェルに依存しており、Bashでは次のように使用できます。

declare -r VAR

すでに値がある場合は

declare -r VAR=value

を使用して同時に割り当てることができます。すべてのシェルにこの機能があるわけではありません。

ほとんどのシェルで変数を宣言するには、変数名([A-Za-z_][A-Za-z0-9_]*)の後に等号(等号の周りには*スペースを入れない)、そして値(単純な[A-Za-z0-9_]+でない限り、できれば引用符で囲む)を使用する必要があります。例えば、以下のようになります。

name="John Doe"
ip=127.0.0.1
HORRIBLE=1
解説 (0)

エクスポートを使う。

export ABC="123"

設定されているかどうかを確認するには

env

および/または

env | grep ABC

恒久的に追加するには、これを ~/.bashrc ファイルに追加してください。

export ABC="123"
解説 (6)