bashで環境変数を設定するためにどのセットアップファイルを使用する必要がありますか?


9

ここここで質問と回答をしたように、PATH変数には、アプリのアクティブ化方法に応じて異なるパス名があります。

  • どのようにbashでソフトウェアを起動しても、同じPATH変数を使用するには、どのセットアップファイル(.bashrc、.profileなど)を使用する必要がありますか?

回答:


15

従来、UNIXシステムでユーザーごとの環境変数を定義する場所は~/.profileです。ログインシェルがBourne互換シェルである場合、このファイルはログインシェル(つまり、ログイン時に開始され、コマンドを入力できるプログラム)によって読み取られます。

BashはBourne互換のシェルです。ログインシェルとして呼び出されると、~/.bash_profileこのファイルが存在する場合と存在しない~/.profile場合の両方を読み取ります~/.bash_profile

経験則として、パスワードをテキストモードで(たとえば、テキストコンソールで、またはsshを使用してリモートで)入力すると、取得されるシェルはログインシェルになります。

ただし、グラフィカルプログラムにパスワードを入力してグラフィカル環境にログインすると、通常のログインシェルがバイパスされます。.profileこの場合に読み込まれるかどうかは、グラフィカルセッションの設定方法によって異なります。たとえば、Linuxディストリビューション間、ディスプレイマネージャー間、デスクトップ環境間で異なります。チェーン内のプログラムの1つが明示的にログインシェルを呼び出す場合があります。プログラムの1つが明示的に読み取る場合があります~/.profile。そして時々これのどれも~/.profile起こらず、読まれない。

可変性の例を示すために、Ubuntu 10.04では、関係するスクリプトをざっと一目で確認できる限り、kdmまたはlxdmでログインした~/.bash_profile場合、存在する場合はそれが読み取られ、それ~/.profile以外の場合は読み取られます。gdmでログインした場合~/.profileは、読み取りのみです。xdmでログインした場合、~/.profileは読み取られません。

私が知っているすべてのシステムは、ユーザーごとの環境変数を設定するいくつかの方法を提供しています。残念ながら、一般的な答えはありません。

で環境変数を設定するか~/.bashrc、GUI環境の各端末でログインシェルを起動する推奨事項が表示される場合があることに注意してください。どちらも悪い考えです。理由の1つは、経験した問題です。つまり、環境変数は、ターミナルから起動したプログラムでのみ利用でき、アイコン、メニュー、またはキーボードショートカットで直接起動したプログラムでは利用できませんでした。


一部のアプリケーションは対話型の非ログインシェルを呼び出します。つまり、.profileと.bash_profileは読み取られません。それらのアプリケーションに環境変数を設定したい場合、それを行う場所の1つではないとしても、それを.bashrcに設定する方法があります。github.com/mobile-shell/mosh/issues/102#issuecomment-12503646を
William

@William .profileは、ログイン時に読み取られます。環境変数を入力.bashrcしても機能せず、シナリオは次のことを示しています。このシェルを実行する(おそらくGUI)アプリケーションには環境変数が必要ですが、環境変数をで定義すると.bashrc、 t。
Gilles 'SO-悪をやめる'

moshはGUIではなく、sshに代わるものです。私がリンクしたGithubの問題で説明されているように、私はその行動を擁護するのではなく、私や他の人が経験したのと同じ問題に遭遇した他の人を助けようとしています。
ウィリアム

2

決定的な答えは、Bashスタートアップファイルの bashマニュアルページセクションにあります。「ログインシェルではないインタラクティブシェルが起動すると、Bashは〜/ .bashrcからコマンドを読み取って実行します(そのファイルが存在する場合)。」

他の質問への回答は、eshellが実際には実行されないことを指摘していますbash。Emacs eshellはそうではありませんbash。仮定するとeshell考え負荷が.bashrc仮定として故障しているzshcshロードします.bashrc。それは別のシェルです。

2つのオプションが表示されます。

  1. ディレクトリのリストを受け取り、の適切なbashコードbashとのelispコードを生成する独自のスクリプトを作成しますeshell
  2. ESHELLまたはSHELL環境変数を設定して、実際にemacs内でbashを実行できるようにします。それが私がすることです。Bashはemacsで正常に動作します。

重複なしでパスにディレクトリを追加することに関する議論にも興味があるかもしれません。


1

〜/ .profileにPATHを設定するだけでうまくいくはずです。そのファイルは、ログイン時にbashを含むことがわかっているすべてのPOSIX準拠またはBourneのようなシェルによって読み取られます。そのファイルに変更を加えた場合、変更を有効にするには、ログアウトしてから再度ログインする必要があります。PATHはログインプロセスの環境の一部であるため、その後起動するすべてのシェルにエクスポートする必要があります。

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