web-dev-qa-db-ja.com

bash.bashrcと/ etc / environmentファイルの違い

bash.bashrcファイルに環境変数を設定するために使用した日付まで。最近、/etc/environmentファイルを使用するように言われました。まあ、両方ともうまくいきます。

それで、それらの違いは何ですか?

私はこれをグーグルで調べましたが、「bashrcは特定のユーザーと環境、システム全体で使用されています」とわかりました。ここでシステム全体とはどういう意味ですか? /etc/bash.bashrcは、システム全体に変更を適用していると思います。間違っている場合は修正してください。どんな種類の助けも歓迎されます。

41
trapaank

違いの1つは、/etc/environmentには変数の定義のみが含まれており、変数の展開/補間を一切行っていないように見えることです。したがって、定義内の変数を参照することはできません。たとえば、これは機能しません。

A="else"
B="something $A"

Bは、予想されるsomething $Aではなく、文字通りsomething elseになります。

この質問 を参照してください。

ところで、Googleで見つけた答えは、システム全体の~/.bashrcではなく、ユーザーの/etc/bash.bashrcを参照しているようです。それが混乱を引き起こしている可能性があります。

35
roadmr

/etc/environmentファイルは、ブート時にすべてのユーザーに対してシステム全体の変数を設定します。ユーザーがbashシェルを開くと、/etc/bash.bashrc内のコマンドが実行されます。したがって、bashシェルが少なくとも1回開かれない限り、変数は設定されません。

18
André Stannek

そして、「システム全体」について尋ねているとき:

/etcディレクトリーにある構成ファイルは、システム上のすべてのユーザーに適用されます。 /etc/bash.bashrcの場合、これは、そのマシンで「Borne Again Shell」(別名Bash)を使用しているすべてのものに意味します。あなたがそれを使用している唯一の人間であっても、「技術ユーザー」の影響を受ける可能性があります(単に/etc/passwdを見て、そこに「/ bin/bash」という用語が記載されている頻度を確認するか、grep bash /etc/passwd | wc -lを使用します。その番号を直接与えます(つまり、ファイル "/ etc/passwd"から文字列 "bash"を含むすべての行を "グラブ"し、結果( "|")をコマンド "wc"(ワードカウント)に送信してcount行( "-l")。

そのため、ユーザーにとっては、代わりに~/.bashrcを変更する方がはるかに安全です(つまり、ホームディレクトリー内の先頭にドットが付いたファイル「.bashrc」、たとえば/home/ankur/.bashrc)。ユーザーに影響を与え、すべてを残すそれ以外の場合。 /etcのファイルは、システム全体の変更が本当に意図されている場合にのみ変更する必要があります。

その他:両方の構成が存在する場合に使用されます。最初に、システム全体のファイル(ここでは/etc/bash.bashrc)が読み取られ、「ソース」(現在のセッションに設定が適用されます)、次にユーザー/home/username/.bashrcが同じように処理されるため、設定を追加したり、グローバル/etc/bash.bashrcファイル。

6
Izzy

システム全体とユーザー全体の範囲の議論を超えて、最も重要な違いの1つは、/etc/environment~/.bashrc以外のnotスクリプトであるということです。

/etc/environment内の変数を逆参照することはできません。その変数の割り当ては、文字通り行の値を取ります(roadmrで既に述べたように)。

新しいパスを追加しようとして$PATH内の/etc/environmentを台無しにすると、Ubuntuはロックアウトされます

PATH=$PATH:/new_path

Ubuntu GnomeまたはUnityのログインページで、パスワードを間違えることなく申し込むことができなかった場合。そして、最近/etc/environmentを変更しました。これはほとんどの場合です。

修正は、仮想コンソールにログインすることです CTRL+ALT+F1 ログインコンソール、手動で$PATHを確認し、/etc/environmentファイルを修正します。

this に従って、/etc/environmentはPAMスタックによってロードされ、環境変数を1行ずつ入力します。

3
legendbb