Bash-Aliase sollten in den .bash_aliases
oder .bashrc
-Dateien in den einzelnen Basisverzeichnissen abgelegt werden. Wenn Sie globale Bash-Aliase erstellen müssen, können diese eingehen. /etc/bash.bashrc
Oft ist es jedoch am besten, sie einfach zu den .bash_aliases
oder .bashrc
-Dateien hinzuzufügen, /etc/skel
damit sie von neu erstellten Benutzern geerbt werden.
Es ist fast immer falsch ein Alias in in zu definieren .profile
, .bash_profile
oder /etc/profile
.
Um zu verstehen, warum, muss man verstehen, unter welchen Umständen Befehle aus jeder dieser Dateien ausgeführt werden. Es gibt Missverständnisse darüber, die ich unten anspreche.
Auch wenn Sie Aliase für mehrere Benutzer definieren möchten, sollten Sie mit deren Definition für einzelne Benutzer vertraut sein, damit Sie entscheiden können, welche Methode am besten für Sie geeignet ist.
Aliase für einzelne Benutzer
Insbesondere wenn Sie eine grafische Benutzeroberfläche verwenden , handelt es sich bei den meisten interaktiven Shells wahrscheinlich um nicht angemeldete Shells. Auch wenn Sie nie eine GUI verwenden, verwenden Sie wahrscheinlich immer noch nicht angemeldete Shells mit einer gewissen Häufigkeit. Sie möchten, dass Ihre Aliase in diesen Shells funktionieren.
Insbesondere wenn Sie sich jemals nicht grafisch in einer virtuellen Konsole oder über SSH anmelden, verwenden Sie wahrscheinlich manchmal Anmelde-Shells. Sie möchten also, dass Ihre Aliase auch in interaktiven Login-Shells funktionieren.
Wenn eine interaktive Shell ohne Anmeldung gestartet wird , wird sie im Basisverzeichnis .bashrc
des Benutzers gespeichert. Standardmäßig bezieht jeder Benutzer in Ubuntu .bashrc
selbst Quellen .bash_aliases
, falls vorhanden.
- Um Quelle ist eine Datei , sein Inhalt zu veranlassen, in der ausgeführt wird aktuell Shell. Änderungen an der Shell-Umgebung, die in einer Datei vorgenommen wurden, die als Quelle dient, bleiben auch nach Ausführung aller Befehle in der Datei bestehen.
Das Lesen der Kommentare in Ubuntus Standard .bashrc
zeigt, dass es offiziell beabsichtigt ist, dass Aliase in .bashrc
oder gehen .bash_aliases
. .bashrc
Enthält bereits einige Alias-Definitionen (führen Sie sie aus grep '^[[:blank:]]*alias' ~/.bashrc
, um sie anzuzeigen) und gibt explizite Hinweise dazu, wo solche Definitionen eingefügt werden sollen:
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Aber was ist mit interaktiven Login- Shells? Anstelle von " .bashrc
login shells source" .profile
.
- ... Sofern nicht
.bash_login
vorhanden, wird es stattdessen beschafft.
- ... Sofern nicht
.bash_profile
vorhanden, wird es stattdessen beschafft.
Allerdings ist die gute Nachricht , dass in Ubuntu standardmäßig Befehle in .bashrc
werden auch in der interaktiven Login - Shells laufen , weil der Standard.profile
Standardprüft , ob der aktuell Shell bash (und wenn ist .bashrc
vorhanden), und wenn ja, Quellen .bashrc
:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Ich schlage vor, dass Benutzer .bash_aliases
in ihren Home-Verzeichnissen neue Bash-Aliase definieren (die erstellt werden, wenn sie noch nicht vorhanden sind). Dies ist eine besonders saubere und einfache Methode, um Aliasdefinitionen auf Benutzerebene permanent zu machen.
Aliase sollten nicht definiert werden,.profile
da sie in nicht angemeldeten Shells undefiniert bleiben würden. Im Gegensatz zu einem Großteil der Umgebung einer Bash-Shell sind Aliase dies nicht in untergeordnete Shells exportiert:
ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found
Insbesondere verursachen standardmäßig die meisten Desktop-Umgebungen .profile
bei der grafischen Anmeldung bereitgestellt, aber:
- Dies wird nicht unbedingt von einer Bash-Shell ausgeführt, sodass Alias-Definitionen möglicherweise nicht einmal verarbeitet werden. noch wichtiger ist
- Auch wenn Aliasdefinitionen verarbeitet werden, werden sie nicht an untergeordnete Prozesse weitergegeben . Insbesondere werden sie nicht an Shells weitergegeben, die durch Öffnen eines Terminal-Fensters erstellt wurden!
Aliase sollten nicht aus.bash_profile
.bash_login
demselben Grund, sondern auch aus einem anderen Grund in (oder ) definiert werden . Naives Erstellen einer dieser Dateien und Putten nur Alias - Definitionen in es in einem der Code verhindert die .profile
Ausführung von!
In Situationen, in denen .bash_profile
oder .bash_login
wirklich nützlich ist, gibt es normalerweise .profile
irgendwo eine Quelle , die dieses Problem löst. (Dann ist das einzige verbleibende Problem, wie bei.profile
Definieren von Aliasen wie bei .bash_profile
oder .bash_login
nicht richtig funktioniert.)
Aliase für neue Benutzer, automatisch
Wenn ein Benutzerkonto des Typs erstellt wird, der einen echten Menschen darstellen soll, wird in der Regel ein neues Verzeichnis erstellt, das als Basisverzeichnis dient. Der Inhalt von /etc/skel
wird dann in das Ausgangsverzeichnis kopiert. Auf diese Weise beginnen mehrere Benutzer mit ähnlichen Konfigurationsdateien in ihren Basisverzeichnissen. In Ubuntu schließt dies ein.profile
, .bashrc
und einige andere Dateien.
Um zu ändern, welche Aliase für neue Benutzer definiert sind, können Sie diese einfach eingeben /etc/skel/.bash_aliases
(Sie müssen sie erstellen) oder /etc/skel/.bashrc
.
Wenn Sie eine bereits vorhandene Datei in bearbeiten /etc/skel
möchten Sie diese möglicherweise zuerst sichern. Sie sollten die Sicherungskopie jedoch nicht ablegen /etc/skel
, da sie sonst ebenfalls in die Home-Verzeichnisse der neuen Benutzer kopiert wird.
Dies ist wahrscheinlich die beste Möglichkeit, um neue Aliase für mehrere Benutzer hinzuzufügen. Bestehende Benutzer können die Aliase einfach selbst hinzufügen. Wenn Sie die Aliase in definieren/etc/skel/.bash_aliases
, können Sie sie einfach an diese Datei weiterleiten, die sie möglicherweise in ihre Ausgangsverzeichnisse kopieren (oder in ihre eigene benutzerdefinierte .bash_aliases
Datei einfügen).
Es ist für einen Benutzer trivial, einen Alias zu definieren. Darüber hinaus sind Aliase nicht extrem robust . Sie funktionieren nur unter bestimmten Umständen. Wenn Sie einen neuen Befehl erstellen müssen, der die ganze Zeit funktioniert , für alle , sollten Sie nicht den Befehl als Alias implementieren. Und Sie können Benutzern, die sie nicht möchten, keine Aliase aufzwingen - sie können sie einfach unalias
.
Globale Aliase für alle Benutzer
Obwohl ich Ihnen raten , diesen Ansatz zu vermeiden, Sie können Aliase in der die definieren globale /etc/bash.bashrc
Datei. Sie werden dann sowohl für interaktive Shells ohne Anmeldung als auch für interaktive Anmeldeshells definiert. Der Grund ist, vor Dateien im Home-Verzeichnis des Benutzers bezogen werden:
- Anmeldeshells (und nur Anmeldeshells und andere Prozesse, die sich wie Anmeldeshells verhalten) führen Befehle aus
/etc/profile
automatisch aus.
- Nur Nicht-Login - Shells Ausführen von Befehlen in
/etc/bash.bashrc
automatisch, aber
- Ubuntus Standard
/etc/profile
prüft, ob es sich bei der laufenden Shell um Bash handelt (und falls /etc/bash.bashrc
vorhanden) und wenn ja, um Sources /etc/bash.bashrc
.
Dies ist analog dazu, wie die Standardeinstellung pro Benutzer .profile
den pro Benutzer ausgibt, .bashrc
wenn die Shell bash ist (wie oben beschrieben).
So sieht der eigentliche Code dafür im Standard aus /etc/profile
:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
Dieser Block führt auch andere Aufgaben aus. Insbesondere if
prüft der Outer , ob die Shell wahrscheinlich interaktiv ist (indem er prüft, ob der Aufforderungstext nicht leer ist), und prüft dann, ob die aktuelle Shell eine Bash ist und gibt Quellen an /etc/bash.bashrc
, wenn dies nicht der Fall ist ist schon fertig in/etc/bash.bashrc
.
Sie sollten nicht globale Aliase in definieren /etc/profile
für die gleichen Grund sollten Benutzer sie nicht in ihrem lokalen definieren.profile
s: wenn Sie das tun, werden sie nur für Login - Shells, und nicht für ihr Kind Schalen definiert werden.
Schließlich ist zu beachten , dass im Gegensatz zu der Standard - pro-Benutzer .bashrc
, der Standard /etc/bash.bashrc
hat Datei nichts über Aliase enthalten. Es ist etwas ungewöhnlich, Benutzern Aliase in einer Datei zu geben, in der sie sie nicht bearbeiten oder deaktivieren können. (Natürlich, sie noch kann das tun, durch zwingende ihre Definitionen in ihrem eigenen lokalen .bashrc
, .bash_aliases
oder anderswo.)
Weitere Lektüre