ログインか非ログインかに関係なく、常にインタラクティブモードで読み込まれるBashファイルはありますか?


10

私の知る限り、対話型シェルはログインである場合とログインでない場合があり、それらの起動ファイルは異なります。

  • もしインタラクティブ+のログインシェル→ /etc/profileその後の最初読める~/.bash_profile~/.bash_loginと、~/.profile
  • もしインタラクティブ+非ログインシェル→ /etc/bash.bashrcその後、~/.bashrc

ログインシェルかどうかに関係なく、インタラクティブシェルを使用するたびにいくつかの変数を設定したいと思います。



1
@strugeeいいえ、この質問は環境変数に関するものではありません。
Gilles「SO-邪悪なことをやめなさい」14年

@ギレスはい、しかしあなたの答えは等しく適用されます。
14年

1
@strugeeそれは私が当面の質問を超えて周辺の話題に触れたからです。1つの回答の1つの段落が重複することはありません。質問は、回答が実質的に同一である場合にのみ重複します。1つの回答に2番目の回答に十分な資料が含まれている場合は同じです。
Gilles「SO-邪悪なことをやめなさい」14年

回答:


10

いいえ、ありません。はい、これは設計上の欠陥です。

で次のコンテンツを使用します~/.bash_profile

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

それは非対話型ログインシェルで、親プロセスがあるとき:bashのも奇妙癖を持っていることに注意してくださいrshdまたはsshd、bashのソース~/.bashrc(ただし~/.bash_profileまたは~/.profile)。したがって、これをあなたの一番上に置きたいかもしれません.bashrc

if [[ $- != *i* ]]; then return; fi

参照してくださいbashrcにと.bash_profileの違いログインシェルと非ログインシェルの違いを?


これらの癖はセキュリティ上の理由によるものです(セキュリティ上重要な設定で実行しているときに予期しないファイルをロードしないでください)。
フォンブランド2014年

2
@vonbrand Er、なに?いいえ、これらの癖はセキュリティとはまったく関係ありません。「予期しないファイル」は含まれていません(ただし.bashrc、非インタラクティブな設定でのロードが実際には予期しないものとしてカウントされる可能性がある場合を除く)や、セキュリティ上重要なコンテキストのチェックはありません。
Gilles「SO-悪をやめる」14年

これはループを防ぐ方法ですか?
Braiam 14年

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