.bashrcの目的は何ですか?


回答:


131

.bashrcは、Bashがインタラクティブに起動されるたびに実行されるシェルスクリプトです。対話型シェルセッションを初期化します。そのファイルには、コマンドプロンプトで入力できるコマンドを入力できます。

ここにコマンドを配置して、特定の環境で使用するためのシェルをセットアップしたり、好みに合わせてカスタマイズしたりします。よくあること.bashrcは、常に利用できるようにするエイリアスです。

.bashrc対話型のシェル起動ごとに実行されます。あなたが言うなら:

$ bash ; bash ; bash

その後、Ctrl-D3回ヒットすると、3回.bashrc実行されます。しかし、代わりにこれを言うと:

$ bash -c exit ; bash -c exit ; bash -c exit

その後、.bashrc以来、まったく実行されません-cバッシュコールが非インタラクティブにします。ファイルからシェルスクリプトを実行する場合も同様です。

コントラスト.bash_profile.profileは、新しいログインシェルの開始時にのみ実行されます。(bash -l)は、コマンドの中に入るかどうかを選択.bashrc.bash_profileあなたはそれを一度実行したいかどうかにかすべてのインタラクティブシェルの開始のために依存します。

これらの変更は通常、.bashrcべき等ではないためPATH.bash_profile代わりにを使用するエイリアスの反例として、代わりに調整を行います。

export PATH="$PATH:/some/addition"

.bashrc代わりにそれを配置すると、インタラクティブな:/some/additionサブシェルを起動するたびに、最後までPATHやり直され、コマンドを誤って入力したときにシェルの余分な作業が作成されます。

あなたはいつでもあなたは、新しいインタラクティブBashシェルを得るのうち、殻vi:sh、たとえば、。


6
些細な問題:他のほとんどのシェルとは異なり、bashはログインシェルとして起動されたときにインスタンスごとの構成ファイルを自動的にロードしませ.bashrc。これにより、予期ない動作が発生する場合があります。通常の回避策は、ソース.bashrcを使用する.profileか、.bash_profile代わりにソースを使用することです。
イルマリカロネン

@IlmariKaronen .bashrcは他のシェルでの使用を目的としていないため、.profile(他の非bashシェルで使用される可能性がある)からソースを取得しない方が良いでしょう。
chepner

@IlmariKaronen何が起こるか(読む:なぜデバッグできるのか)いつ、source ~/.bashrcまたは. ~/.bashrc[[ -f ~/.bashrc ]] && source. ~/.bashrcまたは動作[ -f ~/.bashrc ] && source ~/.bashrcしないのか?
ニコスアレクサン

@NikosAlexandris:それは別の質問です。別途お問い合わせください。
ウォーレンヤング

@WarrenYoung私はそう思いますが、それ.bashrcが実際に供給されていることに気付きました(superuser.com/a/183980/128768からの推奨コマンドを使用)。私が直面する問題は実際にはhttps://github.com/junegunn/fzfこのコマンドを介して調達していないことです.bashrcsource ~/.fzf.bash。新しいターミナルを起動し、Ctrl+ Rを取得し`__fzf_history__`bash: fzf: command not foundます。手動でソースを指定する.bashrcと、同じキーショートカットが期待どおりにfzfを起動します。ここでノイズをおologiesびします。
ニコスアレクサン

20

.bashrcファイルの目的は、変数、関数、エイリアスを設定し、(PS1)プロンプトを定義し、新しいターミナルウィンドウを開くたびに使用する他の設定を定義できる場所を提供することです。

新しいターミナル、ウィンドウ、またはペインを開くたびに実行されることで機能します。

ここで私のものを見ることができます(構文の強調表示付きの写真)

HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"

説明:

-1。履歴ファイルを設定して、重複を無視し、デフォルトよりはるかに大きくします。
-2。lsLinuxまたはOSX
-3のどちらを使用しているかに依存するカラーオプション。md1つのコマンドでディレクトリを作成およびcdする機能「」
-4。gitリポジトリにある場合、現在のgitブランチを見つけて...
-5。-9。<code> 20:00:43 durrantm Castle2012 / hom / durrantm / Dropnot / _ / rails_apps / linker master \ n $ _ </ code>
-10のように、素晴らしいPS1プロンプトを定義します。PS2プロンプト
-11の改善。コマンドライン
-12 でviをエディターとして設定します。viをデフォルトのエディターとして設定します
-13。.bash_aliasesファイルが存在する場合は実行します
-14。存在する場合は、gitタブ補完スクリプト(リモートおよびブランチ用)を実行します。
-15。存在する場合はオートジャンプを実行します
-16。bashバージョン> = 4の場合、CD部分を入力せずにCDを許可する
-17。
-18 が存在する場合、bash完了スクリプトを実行します。TMUXが存在する場合は使用します
-19。PATH
-20 にrvmを追加します。存在する場合はrvmを使用します。

カスタマイズせずにLinuxまたはOSXマシンで動作するように、このポータブルを作成しました。したがって、特定の機能や他のスクリプトを使用する前に、存在に関する多くのテストが行​​われます。

また、これにより、新しい端末ウィンドウを開くことに影響する問題が発生することなく、新しいマシンでファイル全体をすぐに使用できるようになります。


オーバーキル...͏͏͏͏͏͏͏͏͏
Pacerier

え?役に立たない?
マイケルデュラント

2
共有してくれてありがとう。ここに豊富な情報。
ビック

7

これはbash設定ファイルです。

対話型(非ログイン)シェル、構成はこれらのファイルから読み取られます。

  • $HOME/.bashrc

ログインシェルの場合、設定は次のファイルから読み取られます。

  • /etc/profile (常に調達)
  • $HOME/.bash_profile (これらのファイルの残りは、1つが見つかるまで順番にチェックされ、他は読み込まれません)
  • $HOME/.bash_login
  • $HOME/.profile

それらがどのように/いつロードされるかの簡単な説明は、下の画像にあります。

私が追加echoに私.bashrc.bash_profile

対話型シェルとログインシェル

詳細についてman bash


2
これは、実際には古い質問に付加価値を加えるものではありません。また、あなたはUnixとLinuxが初めてなので、テキストの写真を投稿しないようにしてください。代わりに、コードブロックの書式設定を使用して、コンソールからコピーする方が良いでしょう。これにより、テキストの検索/コピーなどが可能になります。あなたの例の場合、実際には複雑なコマンドや検索に適したものはありませんが、他の回答には良い習慣があります。
Centimane

1
「古い質問」への参照を完全に理解しているかどうかはわかりません。これは一番上の質問リストにあり、60kビューに関連しています。以前の回答のようなダイアログ/推測とは対照的に、付加価値はフォーマットに由来すると考えました。ただし、フォーマットも編集されています。コードブロックの使用に関するコメントを心に留めておきます。
ティモシーLJスチュワート

2
回答を投稿したため、「アクティブな」質問リストの一番上にあります。質問はもともと2014年に尋ねられ、回答を受け入れました。受け入れ答えはの目的を述べた.bashrcとの違いを区別.bashrcし、.bash_profileあなたの答えの内容をカバーしています。がっかりしないでください、あなたは誠実な努力をしますが、他の回答ではカバーされないコンテンツで質問に答えることに集中しようとします。
Centimane
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.