Kann ich Bash-Aliase lokal im Verzeichnis haben?
Bei einer solchen Verzeichnisstruktur:
dir1/
- .
- ..
- dir2/
- file
Wenn ich cd dir1
Alias eg
nicht funktioniert, aber wenn ich cd dir1/dir2/
solche Alias funktioniert. Definition von alsias sollte auch lokal sein, wohnen indir1/dir2/
Anwendungsfall: Ich bin Programmierer mit vielen verschiedenen Begleitwerkzeugen für meine Projekte. Ich würde gerne Aliase für einige davon erstellen, aber die meisten davon wärenProjekt/VerzeichnisSpezifisch.
Ich habe einen Bash-Befehl gesehen al
, der dies bewerkstelligen könnte, aber er ist in meinem Ubuntu (14.04) nicht vorhanden.
Antwort1
Ja. Der einfachste Ansatz wäre, eine Datei zu haben, in der Ihre Aliase in jedem Verzeichnis definiert sind. Also zum Beispiel:
$ cat dir1/.alias
alias eg='echo "this is dir1"'
$ cat dir2/.alias
alias eg='echo "this is dir2"'
Im obigen Beispiel enthält jedes Verzeichnis eine Datei mit dem Namen, .alias
in der der eg
Alias definiert ist. Nun, cd
in eine davon,Quelledie Datei, und der Alias wird verfügbar:
$ cd dir1 && source .alias
$ eg
This is dir1
$ cd ../dir2 && source .alias
$ eg
This is dir2
Wenn Sie möchten, dass dies automatisch erfolgt, fügen Sie diese Zeile hinzu ~/.bashrc
:
## Check if an '.alias' file exists and, if it does, source it.
PROMPT_COMMAND='[ -e .alias ] && source .alias'
Die Variable definiert einen Befehl, der vor jeder Eingabeaufforderung ausgeführt wird, also nach jedem ausgeführten Befehl. Das bedeutet, dass diese Datei als Quelle verwendet wird, PROMPT_COMMAND
sobald Sie in ein Verzeichnis wechseln, das eine Datei enthält ..alias
Anmerkungen
Dies ist unsicher. Jeder Code in der
.alias
Datei wird ausgeführt. Die Verwendung erfolgt auf eigenes Risiko. Der manuelle Ansatz ist viel sicherer.Alle in der Datei definierten Aliase
.alias
sind nach Verlassen des Verzeichnisses weiterhin verfügbar, bis sie durch eine andere Aliasdefinition mit demselben Namen überschrieben werden. Wenn das ein Problem darstellt, können Sie alle Aliase löschen und dann Ihre globalen Aliase mit folgendem Befehl neu laden:unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases
Um es zu vereinfachen, machen Sie eine Funktion daraus, indem Sie Ihrem folgende Zeilen hinzufügen
~/.bashrc
:clear_aliases(){ unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases; }
Anschließend können Sie
clear_aliases
die Standardeinstellungen wiederherstellen.