Antworten:
.bashrc
ist ein Shell-Skript , das Bash immer dann ausführt, wenn es interaktiv gestartet wird. Es initialisiert eine interaktive Shell-Sitzung. Sie können jeden Befehl in diese Datei einfügen, den Sie an der Eingabeaufforderung eingeben können.
Sie geben hier Befehle ein, um die Shell für die Verwendung in Ihrer speziellen Umgebung einzurichten oder die Dinge an Ihre Vorlieben anzupassen. Eine gemeinsame Sache bringen in .bashrc
sind Aliase , die Sie immer zur Verfügung stehen sollen.
.bashrc
Läuft bei jedem interaktiven Shell-Start. Wenn du sagst:
$ bash ; bash ; bash
und dann Ctrl-Ddreimal getroffen, .bashrc
wird dreimal ausgeführt. Aber wenn Sie das stattdessen sagen:
$ bash -c exit ; bash -c exit ; bash -c exit
wird dann .bashrc
gar nicht ausgeführt, da -c
der Bash-Aufruf nicht interaktiv wird. Dasselbe gilt, wenn Sie ein Shell-Skript aus einer Datei ausführen.
Contrast .bash_profile
und .profile
die nur zu Beginn einer neuen Login-Shell ausgeführt werden. ( bash -l
) Sie wählen, ob ein Befehl in .bashrc
vs eingeht, .bash_profile
je nachdem, ob er einmal oder bei jedem interaktiven Shell-Start ausgeführt werden soll.
Als Gegenbeispiel für Aliase, die ich lieber einsetze .bashrc
, möchten Sie stattdessen PATH
Anpassungen vornehmen .bash_profile
, da diese Änderungen in der Regel nicht idempotent sind :
export PATH="$PATH:/some/addition"
Wenn Sie dies .bashrc
stattdessen einfügen , wird jedes Mal, wenn Sie eine interaktive Sub-Shell starten, :/some/addition
das Thema bis zum Ende des PATH
nächsten Schritts fortgesetzt, wodurch zusätzliche Arbeit für die Shell entsteht, wenn Sie einen Befehl falsch eingeben.
Sie erhalten eine neue interaktive Bash-Shell, wenn Sie zum Beispiel mit einer Shell aussteigenvi
:sh
.
.bashrc
wenn es als Anmeldeshell gestartet wird. Dies kann manchmal zu unerwartetem Verhalten führen . Die übliche Problemumgehung besteht darin, .bashrc
von .profile
oder zu .bash_profile
beziehen.
.bashrc
es nicht für die Verwendung durch andere Shells vorgesehen ist, ist es besser, es nicht von .profile
(möglicherweise von anderen Nicht- bash
Shells) zu beziehen .
source ~/.bashrc
oder . ~/.bashrc
oder [[ -f ~/.bashrc ]] && source. ~/.bashrc
oder oder [ -f ~/.bashrc ] && source ~/.bashrc
nicht funktioniert?
.bashrc
tatsächlich aus Quellen stammt (mit dem empfohlenen Befehl von superuser.com/a/183980/128768 ). Das Problem , das ich konfrontiert ist eigentlich die nicht Beschaffung https://github.com/junegunn/fzf
über diesen Befehl innen .bashrc
: source ~/.fzf.bash
. Ich starte ein neues Terminal, dann Ctrl
+ R
und ich bekomme `__fzf_history__`bash: fzf: command not found
. Ich .bashrc
beschaffe manuell und die gleiche Tastenkombination startet FZF wie erwartet. Entschuldigung für den Lärm hier.
Der Zweck einer .bashrc
Datei besteht darin, einen Ort bereitzustellen, an dem Sie Variablen, Funktionen und Aliase einrichten, Ihre PS1-Eingabeaufforderung definieren und andere Einstellungen definieren können, die Sie bei jedem Start verwenden möchten, wenn Sie ein neues Terminalfenster öffnen.
Es wird jedes Mal ausgeführt, wenn Sie ein neues Terminal, Fenster oder Fenster öffnen.
Sie können meine hier sehen (Bild mit Syntax-Hervorhebung) :
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"
Erläuterung:
-1. Richten Sie meine Verlaufsdatei so ein, dass Duplikate ignoriert werden und sie viel größer als die Standarddatei sind.
-2. Farboption für ls
je nachdem, ob Sie Linux oder OSX-
3 verwenden. Funktion " md
", um mit einem Befehl
-4 ein Verzeichnis zu erstellen und zu cden. Finde den aktuellen Git-Zweig in einem Git-Repo und ...
-5. -9. Definieren Sie eine großartige PS1-Eingabeaufforderung wie in
-10. Verbesserte PS2-Eingabeaufforderung
-11. Setze vi als Editor in der Kommandozeile
-12. Legen Sie vi als Standardeditor
-13 fest. Führe meine .bash_aliases
Datei aus, wenn sie existiert
-14. Führe mein Git-Tab-Vervollständigungsskript aus (für Fernbedienungen und Verzweigungen), falls es existiert.
-fünfzehn. Führen Sie den Autojump aus, falls vorhanden
-16. Erlaube cd'ing ohne Eingabe des CD-Teils, wenn die Bash-Version> = 4 ist
-17. Führen Sie ein Bash-Abschlussskript aus, falls vorhanden
-18. Verwenden Sie TMUX, wenn es vorhanden ist
-19. Füge rvm zu meinem PATH
-20 hinzu. Verwenden Sie rvm, falls vorhanden.
Ich habe dieses tragbare Gerät so gestaltet, dass es auf jedem meiner Linux- oder OSX-Computer ohne Anpassung funktioniert. Daher werden einige Tests auf Vorhandensein durchgeführt, bevor bestimmte Funktionen und andere Skripte verwendet werden.
Dies erleichtert auch die sofortige Verwendung der gesamten Datei auf einem neuen Computer, ohne dass Probleme auftreten, die sich auf das Öffnen eines neuen Terminalfensters auswirken.
Es ist eine bash
Konfigurationsdatei.
Interaktive (nicht angemeldete) Shells, dann wird die Konfiguration aus diesen Dateien gelesen:
$HOME/.bashrc
Für Login-Shells wird die Konfiguration aus den folgenden Dateien gelesen:
/etc/profile
(Immer bezogen)$HOME/.bash_profile
(Der Rest dieser Dateien wird der Reihe nach geprüft, bis eine gefunden wurde, dann werden keine anderen gelesen.)$HOME/.bash_login
$HOME/.profile
Die Abbildung unten zeigt, wie und wann sie geladen werden.
Ich habe ein echo
zu meinem .bashrc
und hinzugefügt.bash_profile
siehe man bash
für weitere Informationen
.bashrc
und den Unterschied zwischen .bashrc
und an, .bash_profile
der den Inhalt Ihrer Antwort abdeckt. Lassen Sie sich nicht entmutigen, Sie geben sich ehrlich Mühe, aber versuchen Sie, sich auf die Beantwortung von Fragen mit Inhalten zu konzentrieren, die von anderen Antworten nicht abgedeckt werden.