Wenn ich tippe cd ~foo
, möchte ich, dass bash mich zu einem Verzeichnis bringt, das foo
als Abkürzung für die Eingabe des vollständigen Verzeichnispfads von dient foo
. und ich möchte in der Lage sein, cp ~foo/bar.txt ~/bar.txt
eine Datei aus dem /foo/
Verzeichnis in das Ausgangsverzeichnis zu kopieren ... Also im Grunde möchte ich etwas, das genau so ~/
funktioniert, aber wo ich spezifiziere, was das Verzeichnis sein soll. [Ich bin sicher, ich sollte jfgi, aber ich weiß nicht, was ich fg]
28
Antworten:
Zu diesem Zweck habe ich ein Verzeichnis erstellt, das Symlinks zu den Verzeichnissen enthält, die Verknüpfungen enthalten sollen, und dieses Verzeichnis zu Ihrem CDPATH hinzugefügt. CDPATH steuert, wo
cd
gesucht wird, wenn Sie zwischen Verzeichnissen wechseln.cd
Befindet sich dieses Verzeichnis mit Symlinks in Ihrem CDPATH, können Sie sofort auf eines der mit Symlinks verknüpften Verzeichnisse zugreifen:Der Nachteil ist natürlich, dass es nicht funktioniert, wenn sich in Ihrem aktuellen Verzeichnis ein Verzeichnis mit dem Namen "b" befindet, das Vorrang vor dem CDPATH hat
Normalerweise mag ich keine Antworten mit der Aufschrift "Zuerst muss man die Muschel wechseln", aber genau diese Funktion gibt es in ZSH , wenn Sie bereit sind, sie stattdessen zu verwenden. Es heißt benannte Verzeichnisse . Sie exportieren eine Variable
foo
und wenn Sie auf~foo
sie verweisen, wird sie in den Wert von aufgelöst$foo
. Dies ist besonders praktisch, da es auch in folgenden Befehlen funktioniertcd
:quelle
Sie könnten eine Wrapper-Funktion für schreiben
cd
und sie "cd" nennen (letztendlich ruft die Funktionbuiltin cd
- unter Verwendung desbuiltin
Schlüsselworts - auf). Sie können ein Präfix-Zeichen verwenden, das Bash in der Befehlszeile nicht erweitert, bevor Ihre Funktion es sieht. Es ist unwahrscheinlich, dass es als Anfangszeichen in Ihren Verzeichnisnamen erscheint, z. B. ":". Sie möchten es robuster machen, aber hier ist eine einfache Übersicht:quelle
mit bash:
~foo
ist für das Home-Verzeichnis des Benutzers foo reserviert. Ich würde nicht empfehlen, Benutzer nur zu diesem Zweck zu erstellen.Sie können Ihr Leben leichter (oder schwerer) machen, wenn Sie Verzeichnisse wechseln, indem Sie die
CDPATH
Umgebungsvariable setzen (suchen Sie sie inbash(1)
).Abgesehen davon besteht die einzige Möglichkeit darin, Umgebungsvariablen für die Verzeichnisse festzulegen, die Sie abkürzen möchten.
quelle
Bash-Variablen können zum Erstellen eines Lesezeichen-Systems verwendet werden. Variablen funktionieren mit jedem Befehl und Bash vervollständigt den Variablennamen. Wenn in neueren Versionen von bash ein / an den Variablennamen angehängt wird, kann der Pfad, den die Variable enthält, ebenfalls mit einem Tabulator vervollständigt werden.
Aus Gründen der Persistenz können Variablendeklarationen in einer Datei gespeichert werden, die von .bashrc stammt. Da es sich bei dieser Datei um ein Bash-Skript handelt, kann sie Deklarationen enthalten, die auf andere Variablen verweisen, z. B. auf
aur="${HOME}/AUR"
oder nur auf bestimmten Hosts. Diesif [[ $HOSTNAME == foo ]]; then bar=baz; fi
ist hilfreich, wenn Sie Konfigurationsdateien auf mehreren Hosts und Benutzern wiederverwenden.Mit der folgenden Bash-Funktion (die zu .bashrc hinzugefügt oder von dort bezogen wird) können Lesezeichen zur Lesezeichen-Datei hinzugefügt und daraus entfernt werden. Es ist ziemlich neu und garantiert nicht fehlerfrei.
quelle
Ein Weg wäre, einen Alias für CD zu erstellen
~c
, der den gewünschten Pfad ersetzt. Oder benutze einfach zsh;)quelle
Zum Ändern von Verzeichnissen können Sie wcd: Wherever Change Directory verwenden
Damit wird es so sein
wcd plugin_root
.quelle
cd
als auch funktioniert ...Ich habe die folgende Funktion, die Alias im laufenden Betrieb erstellen wird,
Wenn ich ein Verzeichnis mit einem Lesezeichen versehen möchte, gebe ich einfach Folgendes ein
s dirName
. Dies erzeugt einen Alias wiealias dirName="cd /my/current/directory/;pwd"
. Ich kann also durch einfaches Eingeben in dieses Verzeichnis zurückkehrendirName
. Ich habe eine Version, die es auch in bash_aliases speichert. Dies funktioniert in jeder Shell.quelle