ユーザー環境変数を設定するにはどうすればよいですか?(永続的に、セッションではありません)


145

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

特定のユーザーに環境変数を設定するにはどうすればよいですか?私はdebian squeezeを使用しています。ABC = "123"にするためにファイルに入れるべき正確な構文は何ですか?


7
もう何をしようとしましたか?
-l0b0

1
.bashrc、.bash_profile、.profile、および.ssh / eviromentの編集。私は毎回、右の場所にそれを書いたか、右の構文を持っていた場合は知らないが

4
.bashrcそれが主な場所です。
rozcietrzewiacz

@rozcietrzewiacz:わかりましたが...解決策を講じた後でも、そのファイルの最初と最後にABC1とABC2を設定しようとしましたが、私の環境では設定されていません。

1
.bash_profileようなものが含まれていることを確認します[[ -f ~/.bashrc ]] && . ~/.bashrc
-rozcietrzewiacz

回答:


113

シェルの初期化ファイルに宣言を配置する必要があります。

  • bash、ash、ksh、またはその他のBourneスタイルのシェルを使用している場合は、追加できます

    ABC="123"; export ABC
    

    あなたの中.profileのファイル(${HOME}/.profile)。これは、ほとんどのUnixインストール、特にDebianでのデフォルトの状況です。

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

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

  • ログインシェルとしてzshを設定した場合は、の~/.zprofile代わりに使用します~/.profile

  • tcshを使用している場合は、追加します

    setenv ABC "123"
    

    .loginのファイル(${HOME}/.login

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


5
のデフォルトの動作はsu user、現在のシェルの所有権をユーザー名argに変更し、呼び出し元ユーザーのホームディレクトリと環境を維持します。新しいユーザーになるような方法でシェルに入り、すべての環境設定($ PATH、$ HOME、$ ABCなど)を取得するには、suの最初の引数として-を渡す必要があります。 su - usernameあなたが求めていることを達成します。
ティムケネディ

1
待ってください:「ルートへの出口」とはどういう意味ですか?いずれにせよ、「su」を作成してシェル初期化されませ。「su-」が必要(参照man su
Matteo

1
suそもそもなぜあなたはしたのですか?.profileユーザーが使用できないルート所有者を作成しませんでしたか?
rozcietrzewiacz

1
@acidこれはすべきことです。質問は、ログイン時に何が提供されるかです。それを確認するには、最初にログアウトます。
rozcietrzewiacz

7
.profileすべてのBourne互換シェルによって読み取られるため、そのファイルにBash構文を記述しないでください。特に、export VARIABLE=valueにリファクタリングする必要がありますVARIABLE=value; export VARIABLE
トリプリー

48

/etc/environmentファイルを使用して環境変数を設定します。次に、/etc/environmentファイル内に次の行を追加します。

ABC="123"

これで、すべてのユーザーセッションからABC変数にアクセスできるようになります。変数出力をテストするには、まずコマンドを使用して環境変数を更新します

source /etc/environment

実行しecho $ABCます。


4
ソースコマンドの場合は+1。それはすべての答えに欠けていた
Nerrve

5
/etc/environment完全なbash構文をサポートしていないことに注意してください。難しい方法を見つけました。例えば、パッティングPATH="/usr/bin:/usr/sbin"して、やってPATH="$PATH:/foo/bar"次の行には動作しません
user2428118

これが個人的な問題なのか何なのかはわかりませんが、これをに設定した後/etc/environment、bashターミナルを再起動したり、と入力したりしても、OSを再起動する必要がありましたsource /etc/environment。したがって、環境変数が持続しないという問題がある場合は、再起動してみてください。
ブレアグ

9

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

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

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

man $shell

動作するショートカットは、シェル名を含むそれらのドットファイルをリストすることです:

ls ~/.*${shell}*

ログイン中にファイルの1つが実際に読み取られたかどうかを確認する場合は、それぞれのファイル名を単に印刷できます。たとえば、次のようになります。

echo .bashrc

ログインすると、どのファイルが読み取られているかを確認でき、どのファイルを変更するかを決定できます。echo "$0"の値は$0シェルがドットファイルを処理する方法に依存し、誤解を招く可能性があるため、使用または類似の試みをしないでください。

変数を「永続的に」宣言することになると、これはセッションだけに拡張されることに注意してください。セッションなしで変数の値にアクセスする方法はないため、1つの外部では意味がありません。「読み取り専用」を意味する場合、それはシェルに依存しており、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

5

エクスポートを使用します。

export ABC="123"

設定されているかどうかを確認するには、使用します

env

および/または

env | grep ABC

永続的に追加するには、これを~/.bashrcファイルに追加します。

export ABC="123"

6
彼は、恒久的に定義するために、つまりどのファイルに定義を入れるかを知りたいと思っています。
マッテオ

1
動作しません。ログアウトすると、変数はなくなります。私はセッション間で、それを必要とする

1
あなたが意味するものpermenateではなくpermenently:D
whoami

編集を見てbashrc
whoami

5
なにpermenate?という意味permanentですか?
SSHこの

3

正確なコマンドは次のとおりです。

echo 'export ABC = "123"' >> ~/.profile

4
その通り?マジ?どのシェル(a)が読み取り~/.profile、(b)前後のスペースを許可し=ますか?
Gマン

1

私のために働いた最良の方法は、BASHシェルで.bashrcファイルを変更することです。

たとえば、これを使用します。

  1. .bashrcファイルを開きます
  2. 次の行を追加します。

    export <VARIABLE> = "<ANY PATH/VALUE you want>"
    

    例: export HOME = "/home/user/"

    ""使用' 'すると機能しなくなり、bashrcファイルがソース中にエラーを報告するため、使用することを忘れないでください。

  3. 現在のセッションでソースします。

また、/ etc / environmentファイルを変更しようとしましたが、新しい環境変数を作成できませんでした。ソース変数を取得すると、定義された変数が見つからないというエラーが表示されました。

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