Ich muss oft in ein paar Verzeichnissen in meinem Home-Ordner herumspringen und habe es satt, sie zu schreiben. Ich hätte gerne einen schnelleren Ansatz, der traditionell eine symbolische Verbindung darstellt.
Ich möchte mein Home-Verzeichnis jedoch nicht mit Dutzenden symbolischen Links überladen. Ich könnte ein ~/links/
Verzeichnis erstellen und es mit symbolischen Links überladen, aber es ist immer noch hässlich. Außerdem möchte ich möglicherweise symbolische Links erstellen, die sich jeden Tag ändern (in .bashrc definiert), um zum aktuellen Tageverzeichnis zu springen.
Gibt es eine Möglichkeit, einen symbolischen Link effektiv als Alias zu kennzeichnen, wodurch ein Link erstellt wird, der als Link für die schnelle Navigation erkannt wird, aber nicht tatsächlich angezeigt wird, wenn ich einen ls
Vorgang in meinem Ausgangsverzeichnis durchführe, und nicht länger als die aktuelle Sitzung dauert?
quelle
cd -
willcd
in das letzte verzeichnis wo vorher. Wenn Sie es also zweimal machen, kehren Sie zu Ihrem Ausgangspunkt zurück ... sehr schön für die Situation "Oh, ich habe vergessen, someFile.txt am vorherigen Speicherort zu bearbeiten" => Einfach:cd -
someFile.txt bearbeitencd -
Antworten:
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: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ückew
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:Dies definiert eine etwas kompliziertere Vervollständigung in der Funktion
_list_shortcuts
zum Erstellen der Namensliste und machtjd
eine Funktion und keinen einfachen Alias, da wir wollen, dass sie anders als nur funktioniertcd
. Das-P
Flagcd
, 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:
Und für eine Extraportion Phantasie sollten Sie
jd
alle Verknüpfungen auflisten, wenn Sie ohne Parameter ausgeführt werden: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. :)quelle
Shell-Aliase haben die Funktion, mit der Sie (einige) Namensvervollständigungen vornehmen können (normalerweise gebunden an tab). Alternativ können Sie die
CDPATH
Funktion verwenden, die "kürzlich" (in den letzten 5-6 Jahren) verbessert wurde, um die Namensvervollständigung zu unterstützen. Wenn das für Sie funktioniert, hat es den Vorteil, dass das, was Sie eingeben, der tatsächliche Name des Verzeichnisses ist und keine Mnemonik dafür.Nach dem Bash-Handbuch
Weitere Lektüre:
quelle
CDPATH
Umgebungsvariable, danke. Ich könnte meingit_repos
Verzeichnis zu dieser Variablen hinzufügen ....Für die Verzeichnisse, die Sie häufig benutzen, aber nicht täglich ändern, können Sie auch mehrere
alias
Befehle in Ihre.bashrc
Datei aufnehmen:Ein Freund hat ungefähr 50 davon; Ich habe eine Handvoll; schnell und einfach. Gerade
um das Verzeichnis in / u01 / app / oracle zu ändern
quelle
Ich empfehle
pushd
undpopd
.Ich persönlich finde sie praktisch, wenn ich Entwicklungsarbeit mache / Quellcode lese, wenn mehrere Verzeichnisse beteiligt sind.
Sie implementieren effektiv eine Stapelstruktur / LIFO, in der Sie ein Verzeichnis DRÜCKEN (
pushd
) und das nächste POP-Verzeichnis mit dem Befehl (popd
) abrufen.Wenn Sie sich also in einem Verzeichnis befinden, würden Sie Folgendes tun:
Und wenn Sie es abrufen müssen, tun Sie es
Sie können mehrere
pushd
(s) ausführen und die entsprechendenpopd
(s) später ausführen , um zu den Verzeichnissen zurückzukehren.Ich werde hier einen Link hinterlassen.
http://www.eriwen.com/bash/pushd-and-popd/
quelle
popd
viel benutze . Ich fülle meinedirs
Liste (die mitpushd
Befehlen gefüllt ist ) mit allen Verzeichnissen, die ich für diesen Teil der Zeit besuchen / bearbeiten möchte, und führe sie dann auspushd +1
. Dann kann ich mit einem einfachen!pu
, sehr schnellen Befehl durch die Verzeichnisse blättern. (Beachten Sie, dass sowohl unter Ubuntu als auch unter CentOSpushd
der einzige Befehl für eine Neuinstallation ist, der mit beginntpu
.)Sie könnten sie einfach als Variablen in Ihre einfügen
~/.bashrc
, und dann sind sie nur noch einen$
Schritt entfernt.quelle
Die offensichtliche Antwort sind Variablen , jene symbolischen Dinge in der Shell, die für andere Dinge stehen, ähnlich wie symbolische Links im Dateisystem.
In jeder anständigen Shell werden die TabVariablennamen vervollständigt, was weiter hilft.
quelle