回答:
違いの1つは、/etc/environment
変数の定義のみが含まれており、変数の展開/補間を一切行っていないように見えることです。したがって、定義内の変数を参照することはできません。たとえば、これは機能しません:
A="else"
B="something $A"
Bは文字通りになりますがsomething $A
、期待していませんsomething else
。
この質問をご覧ください。
ちなみに、Googleで見つけた答え~/.bashrc
は、システム全体ではなく、ユーザーのものを指しているよう/etc/bash.bashrc
です。それが混乱を引き起こしている可能性があります。
この/etc/environment
ファイルは、ブート時にすべてのユーザーに対して変数システム全体を設定します。/etc/bash.bashrc
are 内のコマンドは、bash
ユーザーがシェルを開くと実行されます。したがって、bash
シェルが少なくとも1回開かれない限り、変数は設定されません。
そして、あなたが「システム全体」について尋ねているように:
/etc
ディレクトリにある構成ファイルは、システム上のすべてのユーザーに適用されます。以下のために/etc/bash.bashrc
、このすべてと、そのマシン上でバッシュ別名「ボルネAgainシェル」を使用しているすべてを意味します。あなたがそれを使用して人間だけだとしても、単純に見てみましょう(「技術的なユーザーは、」影響を受けるがあるかもしれない/etc/passwd
、または使用-用語「/ binに/ bashが」そこに記載されている頻度を確認しgrep bash /etc/passwd | wc -l
、あなたにこれを与える必要があり、その番号を直接(意味:ファイル "/ etc / passwd"から文字列 "bash"を含むすべての行を取得し、結果( "|")をコマンド "wc"(単語数)に送信して行を数えます( "-l")。
したがって、ユーザーにとっては、~/.bashrc
代わりに変更する方がはるかに安全です(たとえば、ホームディレクトリ内のファイル ".bashrc"-先頭にドットが付いていることを意味します/home/ankur/.bashrc
)。 。ファイルは/etc
、システム全体の変更が本当に意図されている場合にのみ変更する必要があります。
その他:両方の構成が存在する場合に使用されます。まず、システム全体のファイル(ここで/etc/bash.bashrc
は)が読み取られ、「ソース」(現在のセッションに適用される設定)/home/username/.bashrc
が行われ、ユーザーは同じように処理されるため、グローバルから設定を追加または変更/上書きすることもできます/etc/bash.bashrc
ファイル。
システム全体とユーザー全体の範囲の議論を超えて、最も重要な違いの1つは以外のスクリプトでは/etc/environment
ありません~/.bashrc
。
/etc/environment
(roadmrで既に述べたように)文字列で行の値をとる変数の割り当ての内部で変数を逆参照することはできません。
新しいパスを追加しようとして$PATH
内部/etc/environment
を台無しにすると、Ubuntuはロックアウトします
PATH=$PATH:/new_path
Ubuntu GnomeまたはUnityのログインページで、パスワードを間違えることなく申し込むことができなかった場合。そして、あなたは最近修正しました/etc/environment
、それはほとんどの場合です。
この修正は、仮想コンソールにログインすることですCTRL+ ALT+ F1手動で、ログインコンソールをチェック$PATH
し、修正/etc/environment
ファイル。
よると、この、/etc/environment
ラインで環境変数の行を移入PAMスタックによってロードされます。
2つの違いは、/etc/enivironment
ファイルがすべてのユーザーに対して機能するのに対して、bash.bashrcファイルは特にそのユーザーに対してのみ機能することです。また、/etc/environment
ファイルで何か間違ったことをすると、/ etc / environmentファイルの内容をコピーしてbash.bashrcファイルの変更を簡単に取り消すことができる一方で、結果が深刻になる可能性があります。ただし、最初の設定はbash.bashrc
ファイルに、次に/ etc / environmentファイルに設定します。bash.bashrc
ファイルに変更を加えた場合、ターミナルは最初にローカルユーザーファイル(つまりbash.bashrc
)を優先し、次にメインファイル(つまり)を優先します/etc/environment
。