Aliase und Funktionen aktualisieren, nachdem neue Aliase und Funktionen definiert wurden?

55

Wenn ich einen neuen Alias ​​in der .bash_aliasesDatei oder eine neue Funktion in der .bashrcDatei definiere, gibt es einen Aktualisierungsbefehl, um die neuen Aliase oder Funktionen sofort zu verwenden, ohne das Terminal zu schließen (in meinem Fall ist xfce4-terminal mit ein paar geöffneten Registerkarten und vielen geöffneten Dateien) und mitten in der Arbeit)?

xralf
quelle
6
Beachten Sie, dass es keinen Befehl gibt, der diesen neuen Befehl in all Ihren offenen Terminals / Registerkarten kenntlich macht. Sie müssen das . .bashrcoder source .bashrcin jeder Shell ausführen, die Sie geöffnet haben.
Paul Tomblin

Antworten:

66

Durch die Beschaffung der geänderten Datei erhalten Sie Zugriff auf den neu geschriebenen Alias ​​oder die neu geschriebene Funktion im aktuellen Terminal. Beispiel:

source ~/.bashrc

Eine alternative Syntax:

. ~/.bashrc

Beachten Sie, dass Sie dies in jedem Fall ausführen müssen, wenn in Ihrem Terminal mehrere Bash-Instanzen ausgeführt werden (Sie haben mehrere Registerkarten erwähnt).

jasonwryan
quelle
3
sourceist von csh abgeleitet. Die Bourneshell-Art ist . .bashrc.
Paul Tomblin
Das ist interessant, dass dies nicht funktioniert, wenn ich definiere alias prg='prg.py'. Ich muss das Terminal schließen.
Xralf
"Sie müssen dies in jedem Fall ausführen." - Beachten Sie, dass zsh-Benutzer TMOUT und TRAPALRM entsprechend einstellen können, um ~ / .zshrc einmal pro Sekunde oder in einem anderen angemessenen Intervall zu statisieren und (falls erforderlich) neu zu quellen. Ich glaube allerdings nicht, dass Bash das kann.
Kevin
6

Die Eingabe . ~/.bashrcüber die Befehlszeile wird ausgeführt, .bashrcund alle in dieser Datei definierten Funktionen werden erstellt.

.bashrcselbst wird dann auch aufgerufen und ausgeführt .bash_aliases( falls vorhanden), wenn .bashrcdieser Code enthalten ist:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Die Verwendung von . ~/.bash_aliasesalone (zum Beispiel in der Befehlszeile) versucht lediglich, .bash_aliasesohne .bashrc auszuführen, und gibt einen Fehler aus, wenn die Datei nicht vorhanden ist (daher der Dateiprüfungstest, wenn sie in ist .bashrc).

Michael Durrant
quelle
2

Manchmal möchten Sie einen Alias ​​in eine Funktion umwandeln, aber wenn Sie die bashrc-Datei als Quelle verwenden, kann ein seltsamer Fehler auftreten:

. ~/.bashrc
bash: /home/username/.bashrc: line 38: syntax error near unexpected token `('
bash: /home/username/.bashrc: line 38: `hello_world() {'

Dies kann passieren, weil der Aliasname mit dem Namen der neu definierten Funktion kollidiert. Soweit ich weiß, muss man, um dies zu vermeiden, alles unalias machen und dann die bashrc-Datei als Quelle verwenden:

bash-4.3 $
unalias -a && . $HOME/.bashrc
Samuel
quelle