Sie können die Tab-Vervollständigung verwenden. Bei vielen Linux-Distributionen ist bash standardmäßig so konfiguriert, dass beim Drücken der [TAB] -Taste eine Liste möglicher Übereinstimmungen angezeigt wird. Wenn nur eine Übereinstimmung vorhanden ist, ist alles ausgefüllt. Bei CDs ist dies normalerweise eine Liste von Unterverzeichnissen des aktuellen Arbeitsverzeichnisses. Sie könnten das überschreiben, aber ich schlage vor, stattdessen einen Alias jd
für "jump directory" zu erstellen:
alias jd=cd
und dann definieren Sie die "Lesezeichen", die Sie als Vervollständigungen für jd möchten. In der bash-Manpage finden Sie viele weitere Optionen (einschließlich der automatischen Generierung der Ergebnisse im Handumdrehen aus einem Befehl oder einer Funktion). Der einfachste Weg ist jedoch eine Liste von Wörtern mit -W
:
complete -W "/ srv / www ~ / tmp ~ / work" jd
Nun geben jd
und Hit [TAB], und Sie werden Ihre „Lesezeichen“ sehen. Geben Sie einen mehrdeutigen Teil ein und drücken Sie dann [TAB], um den Vorgang abzuschließen. (Im obigen Beispiel wird das ~
s in mein Home-Verzeichnis erweitert, sodass mir das erste [TAB] ein gibt. /
Wenn ich drücke w
und erneut [TAB], /srv/www
wird es ausgefüllt.)
Setzen Sie dies natürlich ein, ~/.bash_profile
damit es bestehen bleibt.
Oder wir können dies auf die nächste Ebene bringen. Erstellen Sie ein Verzeichnis ~/.shortcuts
- beginnend mit einem Punkt, wird es ausgeblendet und muss Ihr schönes, sauberes Home-Verzeichnis nicht auflösen - und füllen Sie dieses mit Symlinks zu Ihren gewünschten Verzeichnissen. Dann fügen Sie dies in Ihr ~ / .bash_profile ein:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
Dies definiert eine etwas kompliziertere Vervollständigung in der Funktion _list_shortcuts
zum Erstellen der Namensliste und macht jd
eine Funktion und keinen einfachen Alias, da wir wollen, dass sie anders als nur funktioniert cd
. Das -P
Flag cd
, mit dem die Symlinks aufgelöst werden sollen, macht alles zu transparenter Magie. Ihre Verknüpfungsnamen müssen nicht einmal mit den Zielen übereinstimmen.
So:
$ ls -l ~/.shortcuts/
total 0
lrwxrwxrwx. 1 mattdm mattdm 16 Dec 17 19:44 tmp -> /home/mattdm/tmp
lrwxrwxrwx. 1 mattdm mattdm 17 Dec 17 19:44 WORK -> /home/mattdm/work
lrwxrwxrwx. 1 mattdm mattdm 8 Dec 17 19:44 www -> /srv/www
$ jd tmp
$ pwd
/home/mattdm/tmp
$ jd WORK
/home/mattdm/work
Und für eine Extraportion Phantasie sollten Sie jd
alle Verknüpfungen auflisten, wenn Sie ohne Parameter ausgeführt werden:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
Hinweis: Ich benutze compgen -W $( cmd )
stattdessen, compgen -C 'cmd'
weil letzteres bei mir nie funktioniert und ich nicht verstehe, warum. Das könnte eine neue Frage von mir sein. :)