Was ist eine schnelle Befehlszeilenmethode zum Wechseln zwischen mehreren Verzeichnissen für die Systemadministration? Ich meine, ich kann pushd .
und popd
zum Umschalten verwenden, aber was ist, wenn ich Mehrfachwerte speichern und durch sie blättern möchte, anstatt sie permanent vom Boden des Stapels zu werfen?
bash
shell-script
administration
Volomike
quelle
quelle
$CDPATH
vielleicht?cd -
Gott, ich habe es erst erfahren, nachdem das Googeln durch diese Frage ausgelöst wurde.cd
überall von Hand. War schmerzhaft. Automatische Vervollständigung mit der Tabulatortaste.Antworten:
Verwenden
pushd
und dann die speziellen Namen für die Verzeichnisse in Ihrem Verzeichnis - Stack:~1
,~2
usw.Beispiel:
Auf
pushd
diese Weise können Sie am effektivsten Ihre Verzeichnisliste laden und dann ein weiteres Verzeichnis als aktuelles Verzeichnis hinzufügen. Anschließend können Sie zwischen den statischen Zahlen wechseln, ohne die Position der Verzeichnisse in Ihrem Stapel zu beeinflussen.Es ist auch erwähnenswert, dass
cd -
Sie zum letzten Verzeichnis nehmen Sie in waren. Also wirdcd ~-
.Der Vorteil von
~-
over just-
ist, dass er-
spezifisch istcd
, wohingegen er von Ihrer Shell auf die gleiche Weise~-
erweitert wird~1
, wie es bei~2
, usw. der Fall ist. Dies ist praktisch, wenn Sie eine Datei zwischen sehr langen Verzeichnispfaden kopieren. z.B:Das obige ist äquivalent zu:
quelle
cd -
cd -
verhält sich wie ein ForthDROP DUP
, wenn man zB mit stack abcd in Verzeichnis a beginnt ,cd -
ändert a den Stack in bbcd . Vielleicht ist das jedoch einbash
Fehler, da eine Sekundecd -
den Stack zurück auf abcd ändert . Daraus können wir schließen, dasscd -
zusätzlich zum Ändern des Stacks eine separate Datenstruktur zum Speichern des vorherigen Verzeichnisses verwendet wird.cd -
benutzt$OLDPWD
und sonst nichts.cd -
war es die frühere Bash- Funktion, dann später fügten sie einen Stapel hinzu, befürchteten jedoch, den alten Code mehr zu brechen, als sie sich ein einfacheres Design wünschten. Korrektur zum vorherigen,cd -
verhält sich wie ein ForthOLDPWD @ SWAP OLDPWD ! DUP .
Im Gegensatzcd foo
zumcd -
druckt das den Namen des eingelagerten Verzeichnisses.bash
‚s builtinpushd
mit den+
und-
Optionen können die Verzeichnis - Stack drehen. Die Syntax kann etwas verwirrend, vielleicht, weil die Stapel a ist Null -Basis - Array. Diese einfachen Wrapper-Funktionen durchlaufen den Verzeichnis-Stack:Test: Richten Sie einen Stapel von vier Verzeichnissen ein.
Jetzt ist / tmp das aktuelle Verzeichnis und der Stack sieht folgendermaßen aus:
Wechseln Sie viermal in das nächste Verzeichnis im Stapel (und zeigen Sie es an):
Ausgabe:
Wechseln Sie viermal in das vorherige Verzeichnis im Stapel (und zeigen Sie es an):
Ausgabe:
Ein Hinweis zu
cd -
: Die Antwort von Wildcard hat gezeigt , wiecd -
das Array $ DIRSTACK nicht verwendet wird (es verwendet die Variable $ OLDPW ), sodasscd -
sich $ DIRSTACK nicht wie bei einem stapelbasierten Swap auswirkt . Zu korrigieren , dass hier eine einfachen $ DIRSTACK -basierte Swap - Funktion:Prüfung:
Ausgabe:
quelle
popd
zu entfernen , tun Sie , um es zu entfernen, ohne die Verzeichnisse zu ändernpopd -n
. Um den Stapel zu löschen, machen Siedirs -c
. Schade, dass die Bash- Designer solche nützlichen Funktionen in nicht-intuitiver Syntax versteckt haben. Sieheman bash
unterpushd
,dirs
usw.Ich schlage vor, dass Sie fasd installieren . Es gibt Ihnen die Möglichkeit, schnell zu jedem Verzeichnis zu springen, in dem Sie bereits waren, indem Sie nur einen kleinen Bruchteil seines Namens eingeben.
Beispiel: Wenn Sie besucht haben
/home/someName/scripts/
, können Sie dorthin springen, indem Sie beispielsweise Folgendes eingebenz scr
. Es ist weitaus bequemer, sich die Reihenfolge im Verlaufsstapel oder Ähnliches zu merken.quelle
Wenn Sie
cd
irgendwo sind, speichert Bash das alte Arbeitsverzeichnis als Umgebungsvariable$OLDPWD
.Sie können mit zu dem Verzeichnis zurückkehren
cd -
, das dem entsprichtcd "$OLDPWD"
.Sie können wie folgt zwischen Verzeichnissen wechseln:
quelle
Ich habe ein Skript namens geschrieben
xyzzy
, um dies zu tun:Die Art und Weise, wie ich das benutze, ist es, in einen
/usr/bin
Ordner zu kopieren und dannchmod a+x
darauf. Anschließend bearbeite ich meine Stamm- und Benutzerkontodatei so~/.bashrc
, dass die folgenden Zeilen unten angezeigt werden:Das 'xy' ist eine Kurzform des Befehls zum schnelleren Tippen.
Dann kann ich das aktuelle Verzeichnis in der Liste speichern mit ...
... und bei Bedarf wiederholen. Sobald ich diese Liste mit den benötigten Verzeichnissen gefüllt habe, bleiben sie dort, bis ich den Computer neu starte, da dann / tmp wieder gelöscht wird. Ich kann dann tippen ...
... um die aktuell gespeicherten Verzeichnisse aufzulisten. Um in ein Verzeichnis zu wechseln, habe ich zwei Möglichkeiten. Eine Möglichkeit besteht darin, den Pfad nach Index anzugeben (und es handelt sich um einen 1-basierten Index):
... das zu dem Verzeichnis wechseln würde, das das zweite Element in der Liste ist. Oder ich könnte die Indexnummer weglassen und einfach tun:
... damit es jedes Verzeichnis nach Bedarf durchläuft. Für weitere Befehle, die Sie ausführen können, geben Sie Folgendes ein:
Natürlich macht die Arbeit mit den albernen Echoanweisungen, die ich hinzugefügt habe, mehr Spaß.
Beachten Sie, dass xyzzy eine Referenz zum Textabenteuer Collosal Cave ist , bei dem Sie durch Eingabe von xyzzy zwischen zwei Räumen im Spiel wechseln können, um Grausamkeiten zu vermeiden.
quelle
Ich verwende ein kleines Skript namens z [link] , das ebenfalls von Interesse sein könnte, obwohl es nicht genau das tut, was Sie gefragt haben.
quelle
Es gibt auch
cd_func
von Petar Marinov, es ist im Grundecd
mit einer Geschichte von bis zu 10 Einträgen: http://linuxgazette.net/109/misc/marinov/acd_func.htmlVerwenden Sie einfach
cd --
, um eine Liste der letzten 10 Verzeichnisse anzuzeigen, in die Sie gegangen sindcd
, undcd -N
(woN
ist der Index des Eintrags), um dorthin zu gelangen.quelle
Ich benutze meistens ZSH mit oh-my-zsh Profil. Sie können die folgende Übereinstimmung in ein Terminal eingeben:
Dann können Sie einfach die Pfeile (nach oben und nach unten) verwenden, um den gesamten Shell-Verlauf durchzugehen, in dem nur die Einträge angezeigt werden, die mit den obigen Zeichen beginnen. Wenn Sie zum Beispiel zu
/home/morfik/Desktop/
und gegangen sind/home/morfik/something/
, können Sie sehr schnell zwischen den Verzeichnissen wechseln. Es spielt keine Rolle, wie viele Einträge Sie im Shell-Verlauf haben, aber wenn Sie viel haben, verwenden Sie einfach einen besseren Ausdruck, dhcd /home/morf
und drücken Sie hier die Auf- / Ab-Pfeiltasten auf Ihrer Tastatur.Es gibt auch einen anderen Weg, um die Lösung zu erreichen. In diesem Fall müssen Sie verwenden tmux und FZF . Dann machen Sie einfach einen Hotkey, zum Beispiel Strg-R, und wenn Sie ihn drücken, wird Ihr aktuelles Fenster geteilt und Sie werden folgendes sehen:
Jetzt können Sie Ausdrücke verwenden, um die Liste zu durchsuchen. Ich habe gerade getippt
^cd /media
, was nur die Einträge zurückgibt, die mit der Phrase beginnen. Natürlich können Sie einfach eingeben'cd 'home
, um den Befehl und auch den gesamten Verzeichnisnamen (nicht Pfad, nur Name) abzugleichen:quelle
Sie können dies mit einer Reihe von Aliasen in Ihrem
~/.bashrc
(oder einem gleichwertigen)Das Hauptziel ist eine möglichst minimale Eingabe (z. B.
d5
Springen zu Verzeichnisnummer 5 im Pool), um zwischen den Verzeichnissen im Pool zu wechseln. Außerdem möchten wir das Hinzufügen / Entfernen von Verzeichnissen zu / aus dem Pool vereinfachen:Jetzt wird jedes Mal, wenn Sie ein Verzeichnis auf dem Stapel verschieben, es an Position 0 (das aktuelle Verzeichnis) zum nummerierten Pool hinzugefügt, und Sie können mit sehr wenig Eingabe (
d<N>
) herumspringen (Verzeichnisse wechseln ) und Ihren nummerierten aktuellen Pool an jedem beliebigen Ort anzeigen Zeit, indem Sie nur tippend
.Einige Beispiele für die Verwendung dieser Aliase:
Anzeigen des nummerierten Verzeichnispools (aktuelles Verzeichnis ist # 0)
Wechsle zwischen den Verzeichnissen: benutze
d<N>
Fügen Sie dem Pool ein neues Verzeichnis hinzu
Springe noch ein bisschen herum:
Entfernen Sie das oberste (aktuelle) Verzeichnis aus dem Pool
quelle
Wenn Sie iselect installiert haben, können Sie Folgendes tun:
Dies gibt Ihnen ein Vollbild-ncurses-basiertes interaktives Menü mit Pfeiltasten, in dem Sie ein Verzeichnis auswählen können,
cd
zu dem Sie wechseln möchten .Wenn Sie
pushd
in der aktuellen Shell-Sitzung nicht verwendet haben , beginnt die Liste der Verzeichnisse im Menü mit nur einem Eintrag, Ihrem aktuellen Verzeichnis. Wenn nur ein Eintrag vorhanden ist, wird dieserdirselect
Alias nurcd
ohne den Menübildschirm verwendet, sodasscd -
praktisch nichts ausgeführt wird (außer, dass keine nützlichen Aktionen ausgeführt werden).Um der Liste ein neues Verzeichnis hinzuzufügen, verwenden Sie
pushd dir
(oderpushd -n dir
, um ein Verzeichnis hinzuzufügen, ohnecd
es gleichzeitig mit-zu versehen).Sie können den
pushd
Stapel vorab füllen, indem Sie in Ihrem.bashrc
oder folgendermaßen vorgehen~/.bash_profile
:Sie können Einträge mit
popd
oder entfernenpopd -n
.Weitere Informationen finden Sie
help pushd
unterhelp popd
, undhelp dirs
in der Bash. Und natürlichman iselect
.Übrigens
iselect
ist wahrscheinlich für Ihre Distribution vorverpackt. Es ist für Debian und Ubuntu usw. und wahrscheinlich auch für andere.quelle
Wenn Sie 5 oder 10 Verzeichnisse haben, die Sie häufig verwenden, und sich nicht unbedingt für kürzlich verwendete 5 oder 10 Verzeichnisse interessieren , richten Sie einige Befehls-Aliase wie ein
Und wenn ich zum Apache-Homepageverzeichnis gehen möchte, gebe ich einfach ein,
cdw
wie ich unter Entsprechung des Alias für einen symbolischen Link geantwortet habe ? .quelle
Ich benutze Sprung , um das Arbeitsverzeichnis schnell zu ändern.
So fügen Sie das aktuelle Verzeichnis hinzu:
So listen Sie alle Ihre Lesezeichen auf:
z.B:
Jetzt können Sie ganz einfach in ein anderes Verzeichnis springen:
Es unterstützt die automatische Vervollständigung für bash und zsh.
Bearbeiten (als Antwort auf @Joe): Die Binärdatei
jump-bin
wird in gespeichert/usr/local/bin
und erstellt mit dem Bash-Integrationsskript (auf meinem PC unter/var/lib/gems/1.9.1/gems/jump-0.4.1/bash_integration/shell_driver
) eine Bash-Funktion,jump
die aufruftjump-bin
.quelle
Ich benutze, um
alias
zu navigieren. Wenn Sie nur wenige Verzeichnisse haben, auf die häufig zugegriffen wird, legen Sie einfach Aliase fest. Zum Beispiel,Dann einfach
bringt dich zu
/etc
.quelle