bashrcまたはbash_profile?


49

2つのbashログインスクリプトの違いを知っています。

.bashrc 「非ログイン」シェルによってのみ実行されます。

.bash_profile(または.bash_loginまたは.profile)は、「ログイン」シェルによって実行されます。

ログイン専用の実行に適しているものの良い例がありますか?私はそれらを入れるだけです.bash_profileが、実際には意味がありません.bashrcか?

(私たちのほとんどが.bashrcからのソースを知っている.bash_profileので、反対の質問にはあまり意味がないようです...)


回答:


24

a .bashrcは非ログインシェル用であるため、画面にエコーするコマンドは避けます。また、echoステートメント.bashrcがsftpコマンドとrsyncコマンド(およびscpコマンドも)を失敗させるという経験に遭遇しました。

# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime

また、通常、非対話型シェルからssh-agentを実行しません。だから私はこれを持ってい.bash_profileます。

if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi

2
〜/ .bash_profileの代わりに〜/ .profileを使用すると、シェルを変更しても機能します。〜/ .bash_profileはbash固有のものです。
ラッセポールセン

1
ただし、bashは.bash_profileまたは.profileのいずれかのみを実行するため、両方を使用する場合は、.bash_profileなどからソースを作成する必要があります。それは...実際には、悪いアイデアではありません
ドン・フォークナー

@Source&@Don:良い点。以前は.bash_profileにBashismが含まれていましたが、今ではもっと普遍的なものに切り替えました。おそらく.profileを使用するのが適切です。
ステファンLasiewski

標準ストリームを介して実装されたリモートファイル転送方法を妨げる出力生成コマンド.bashrcについては、シェルが対話型であるかどうかを確認し、対話型である場合にのみ続行するコードのにこのようなコマンドを配置します。アカウント作成時.bashrcにコピーされたUbuntuのユーザーのデフォルトファイルと/etc/skel/.bashrcsystemwide /etc/bash.bashrcには、シェルが非対話型であるかどうかをチェックして返すコードが既に含まれています(ただし、出力生成コマンドその下に置く必要があります)。
エリアケイガン

8

By風は絶対に入れてはならないことの良い例です.bashrc

それ以外の場合、「仮想端末」の各自で再帰的に実行されます;-)

あなたはそれを試すことができますが、それはちょっと楽しいです。

それをに入れる理由は.profile、ビュブー(実際には画面のちょうどラッパーです)は、ログイン時に一度だけ読み込まれます。また、ビオブ自体は新しいインタラクティブなbashセッションを開始できます。


それは良い例です。By風へのポインタもありがとう。今すぐ試してみてください。
ドンフォークナー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.