pushd
, popd
Und dirs
sind Shell builtins , die Ihnen erlauben , die manipulieren Verzeichnis - Stack . Dies kann verwendet werden, um Verzeichnisse zu ändern, aber zu dem Verzeichnis zurückzukehren, von dem Sie gekommen sind.
Zum Beispiel
Starten Sie mit den folgenden Verzeichnissen:
$ ls
dir1 dir2 dir3
Pushd zu dir1
$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir
dirs
Befehl bestätigt, dass wir jetzt 2 Verzeichnisse auf dem Stapel haben. dir1
und die ursprünglich dir, somedir
.
pushd to ../dir3 (weil wir jetzt drinnen sind dir1
)
$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3
dirs
zeigt, dass wir jetzt 3 Verzeichnisse im Stapel haben. dir3
, dir1
Und somedir
. Beachten Sie die Richtung. Jedes neue Verzeichnis wird links hinzugefügt. Wenn wir damit beginnen, Verzeichnisse auszublenden, kommen sie ebenfalls von links.
Ändern Sie die Verzeichnisse manuell in ../dir2
$ cd ../dir2
$ pwd
/home/saml/somedir/dir2
$ dirs
~/somedir/dir2 ~/somedir/dir1 ~/somedir
Beginnen Sie nun mit dem Poppen von Verzeichnissen
$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1
Beachten Sie, dass wir zurückgekehrt sind dir1
.
Wieder Pop ...
$ popd
~/somedir
$ pwd
/home/saml/somedir
Und wir sind wieder da, wo wir angefangen haben somedir
.
Vielleicht ein wenig verwirrend, aber der Kopf des Stapels ist das Verzeichnis , das Sie sind momentan in Daher , wenn wir wieder zu bekommen. somedir
, Obwohl dirs
zeigt dies:
$ dirs
~/somedir
Unser Stapel ist leer.
$ popd
bash: popd: directory stack empty
cd -
, Aliase für Kürzungencd ..
usw.).pushd
& oftpopd
in Skripten, die mich davor bewahren, mich erinnern zu müssen, woher ich komme. Ich kann immer nurpopd
von dort zurück, wo ich herkomme . Ich mache normalerweisepopd >/dev/null 2>&1
, um es leise zu machen. Ich benutze CD-Alltag in meiner Shell. In diesem Artikel finden Sie auch einige andere Tipps zum Zeitsparen : thegeekstuff.com/2008/10/… .cd -
nur das letzte Verzeichnis verfolgt, stelle ich mir vor, es könnte Probleme geben, wenn Sie eine Funktion aufrufen, die auch das Verzeichnis intern ändert. In diesem Fall wird die Funktion zurückgesetzt - in Ihr aktuelles Verzeichnis und nicht in das Verzeichnis, in das Sie zurückkehren möchten. pushd / popd ist die sicherste Methode. Hinweis: Ich habe meine Theorie nicht getestet.~/somedir/dir3
nach dem ersten zurückgehenpopd
?Es gibt einen sehr nützlichen Anwendungsfall für
pushd
undpopd
Befehle, um mit mehreren Ordnern gleichzeitig zu arbeiten.Sie können den Stapel sehr einfach navigieren, da er nummeriert ist. Das heißt, Sie können während der Arbeit mehrere Arbeitsordner zur Verfügung haben.
Ein einfaches Beispiel finden Sie weiter unten.
Zuerst erstellen wir eine Beispielordnerstruktur.
Dann können Sie alle Ihre Ordner zum Stapel hinzufügen:
Sie können es nachschlagen, indem Sie:
Um sicher zu navigieren, müssen Sie den letzten (Null-) Ordner zweimal hinzufügen, da er immer neu geschrieben wird:
Jetzt können Sie durch diese Ordner springen und mit Stacks wie mit Aliases für die Ordner arbeiten. Ich denke, der folgende Teil ist selbsterklärend:
Ein zusätzlicher Tipp ist, einen Alias für zu erstellen
dirs -v
.Zum Beispiel:
quelle
dirs -c
Ein einfacher Anwendungsfall für die Verwendung von dirs stack ist:
pushd .
Fügt das aktuelle Verzeichnis XX zumdirs
Stapel hinzu. Danach können Sie sich mit bewegencd
und zu XX zurückkehren,popd
unabhängig davon, wie "weit entfernt" Sie sich im Verzeichnisbaum befinden (Sie können über mehrere Ebenen, seitwärts usw. springen). Besonders nützlich in Bash-Skripten.quelle
pushd
/popd
unabhängig von arbeitencd
, können Sie sie als stabileres Lesezeichen als verwendencd -
.pushd
undpopd
erlauben Ihnen, die Verzeichnisse auf dem Stapel zu manipulieren.Wenn Sie
pushd
ein Verzeichnis erstellen, legen Sie das aktuelle Verzeichnis auf dem Stapel ab und ändern es in das als Parameter angegebene Verzeichnis.popd
Damit können Sie zum Verzeichnis auf dem Stapel zurückkehren.Wenn Sie dies wiederholen, bleibt die Verzeichnisüberquerung erhalten, und Sie können in umgekehrter Reihenfolge zu den gespeicherten Verzeichnissen zurückkehren, in der Sie sie gespeichert haben.
quelle
für bash im grunde: anstatt cd zu verwenden kann man verzeichnisse
pushd
wechseln, mit der praktischen verwendung : der verlauf der besuchten verzeichnisse wird gespeichert (richtig: gestapelt) und man kann zwischen ihnen wechselnUm den Stack zu sehen, benutzen Sie
dirs
und zur einfacheren Navigation (um die Nummern der "Stack-Einträge" zu erhalten, benutzen Sie:Ausgabe:
Verwenden Sie nun diese Zahlen mit
cd
und~
wie:Aber diese Nummern sind jetzt neu angeordnet und Position "0" ändert sich, so dass nur
pushd
das Verzeichnis zweimal an die oberste Position (oder verwenden Sie einen Dummy auf Position 0) wie folgt :Jetzt wird 1..3 dort Position halten
(um das aktuelle Verzeichnis vom Stack zu entfernen / aus dem Verlauf zu löschen
popd
)quelle
Eine praktische Anwendung, die ich gefunden habe, ist das Wechseln zwischen Verzeichnissen mit pushd und popd.
Angenommen, wir haben zwei Verzeichnisse, dir1 und dir2, und ich muss aus irgendeinem xyz-Grund kontinuierlich zwischen ihnen wechseln.
Zur Zeit bin ich in einem Verzeichnis mit zwei Verzeichnissen
dir1
unddir2
:Jetzt wechsle ich zu
dir1
Jetzt werde ich hinzufügen
dir1
, um zu stapeln und zu wechselndir2
Wie Sie sehen, habe ich jetzt
dir2
unddir1
auf Stapel und ich bin derzeit indir2
.Nun, um zurück zu wechseln
dir1
, werde ich rennenpushd || popd
.Voila, ich bin in dir1 und ich habe dir1 und dir2 auf dem Stapel. Um wieder zu dir2 zu wechseln, starte
pushd || popd
Dies ist eine einfache Möglichkeit, zwischen Verzeichnissen zu wechseln. Nun könnten Sie was wissen, warum ich zwischen Verzeichnissen wechseln muss? Nun, ein Anwendungsfall ist, wenn ich an einer Webanwendung arbeite, habe ich meine make-Datei in einem Verzeichnis und meine Protokolldateien in einem anderen Verzeichnis. Oft muss ich beim Debuggen der Anwendung zwischen dem Protokollverzeichnis und den neuesten Protokollen wechseln und dann zum make-Verzeichnis zurückkehren, um einige Änderungen vorzunehmen und die Anwendung zu erstellen.
quelle
pushd
undpopd
übercd -
?" Sie haben diese Frage eindeutig nicht beantwortet, da Sie genau beschreiben, wascd -
tut. (2) Was ist der Sinn zu sagenpushd || popd
? Ja, ich weiß, dascmdA || cmdB
heißt laufencmdA
und wenn es fehlschlägt, dann laufencmdB
. Ich frage, was es in diesem Zusammenhang bringt.pushd
Ohne Argument bedeutet "Vertauschen der beiden obersten Elemente im Verzeichnisstapel". Es schlägt fehl, wenn das aktuelle Verzeichnis das einzige Element im Verzeichnisstapel ist. In diesem Fallpopd
wird auch scheitern.pushd
undpopd
.pushd || popd
das Umschalten zwischen Verzeichnissen:pushd
Ohne Argumente ist genau dies der Fall.cd -
Es existiert explizit nur, um zum letzten Verzeichnis zurückzukehren. Zusätzlich wurde die Frage nach dem Vorteil vonpushd
over gestelltcd -
, während diese Antwort eindeutig nur einen Nachteil bietet: mehr Tippen.|| popd
für das Umschalten? Bitte erkläre. (Ist das nicht genug?)cd -
zum Umschalten zwischen zwei Verzeichnissen verwenden. Wenn Siecd
keine Argumente angeben, kehren Sie in Ihr Ausgangsverzeichnis zurück.Einfach ausgedrückt - wenn Sie zwischen mehr als 2 Verzeichnissen navigieren müssen, in der Regel mehrmals hin und her, da
cd -
nur 2 Ordner verwendet werden.Anstatt also beispielsweise zu versuchen, frühere lange Pfade wiederherzustellen, indem Sie sich den Verlauf Ihres Puffers ansehen oder einen langen Pfad mit Tabulatoren abschließen, stapeln Sie einfach die wichtigen Pfade und wechseln bei Bedarf bequem allein nach ihrer Nummer zu ihnen. Das Drehen zwischen komplexen Verzeichnisstrukturen und langen Pfaden wird schnell und einfach.
Mit den integrierten Funktionen können Sie den Stapel auch neu anordnen oder die nicht mehr benötigten Verzeichnisse auslagern, um den Arbeitsablauf flexibel zu gestalten.
Das Stapeln von Verzeichnissen kann auf ähnliche Weise auch in Skripten für Vorgänge verwendet werden, die sich über mehrere Verzeichnisse erstrecken.
quelle
Ich fand die Verwendung von dirs / popd / pushd etwas unangenehm. Ich habe meine persönliche Lösung in tcsh gefunden, indem ich den folgenden Code zu .alias hinzugefügt habe
auf diese Weise habe ich zum Beispiel "p." um das aktuelle Arbeitsverzeichnis in der Datei ~ / .mydir zu speichern. und "cd." um dieses Verzeichnis wieder herzustellen, wann und wo immer ich möchte. "del." entfernt die entsprechende Datei; "Zuhause." setzt das Verzeichnis auf das Ausgangsverzeichnis (entspricht cd; p.); "cdl" listet die gespeicherten Verzeichnisse auf. Beachten Sie, dass Sie mit ~ / Dropbox / .mydir $ b (oder einem anderen Cloud-Dienst wie z. B. ownCloud) anstelle von ~ / .mydir $ b auf intelligente Weise Ihre bevorzugten Verzeichnisse für verschiedene Konten und Computer verwenden können.
quelle
Es hilft mir, zwischen den Verzeichnissen zu wechseln, die zuletzt auf meinem Terminal verwendet wurden. :-) Ich hoffe, es hilft dir, pushd zu verwenden, eher popd. Ich verwende cd ~ stackednumber
quelle
Mit
cd
undcd -
können Sie nur zwischen den beiden zuletzt verwendeten Verzeichnissen wechseln. Ihre "Directory Working Set" -Größe ist zwei.Mit
pushd
können Sie beliebig viele Verzeichnisse in Ihrem Arbeitsset halten.Ich benutze die
pushd
meiste Zeit eher alscd
. Sobald Sie einen Stapel von aktiven Verzeichnissen mit aufgebaut habenpushd directory_name
, können Sie den ganzen Tag mit zwischen ihnen wechselnpushd ~#
.Ich verwende es
popd
nur selten, wenn ich ein Verzeichnis aus dem Stapel entfernen möchte, wenn ich weiß, dass ich mit diesem Verzeichnis fertig bin.Gehen Sie in das Verzeichnis und entfernen Sie es vom Stapel:
Bleiben Sie im aktuellen Verzeichnis und entfernen Sie ein anderes Verzeichnis vom Stapel:
Am Ende haben Sie einen ähnlichen Arbeitsstil wie beim Öffnen mehrerer Terminalfenster oder -registerkarten (eines für jedes Verzeichnis, in dem Sie aktiv arbeiten), jedoch alle in einem Terminal. Dies spart Platz auf dem Bildschirm und da die Verzeichnispfade alle in einer Shell verfügbar sind, können Sie Folgendes tun:
Beispiele:
In
tcsh
(aber nichtbash
) können Sie Ihren Verzeichnisstapel sogar in einer Datei speichern und später wiederherstellen.Sparen:
Wiederherstellen:
Ansonsten ersetzen Sie einfach
~
in denbash
Beispielen mit=
zur Verwendung intcsh
.quelle
Das pushd / popd ist ein so einfaches Konzept, dass ich eine Weile gebraucht habe, um es zu verstehen, da die Leute dazu neigen, es zu lehren, indem sie diese Befehle als Befehle definieren, die "den Verzeichnisstapel manipulieren", was meiner Meinung nach verwirrend ist.
Ich sehe das anders:
pushd [ordnername] - wechselt zu [ordnername] und dokumentiert das Ziel, das [ordnername] in einem Verzeichnisstapel ist, während das oberste Verzeichnis im Stapel immer das aktuelle Verzeichnis ist, in dem Sie sich befinden
popd - führt Sie zuerst in den Verzeichniseintrag, der sich dann oben auf dem Stapel befindet, und entfernt ihn aus dem Stapel
dirs - Gibt den dir-Stack aus (kann als dir-Db behandelt werden, wobei der am weitesten links stehende Eintrag das aktuelle Verzeichnis ist (oben im Stack)
Die 2 beliebtesten Anwendungsfälle sind also:
Anwendungsfall 1: Navigieren mit pushd und popd
Angenommen, ich habe die oben genannten Schritte ausgeführt, da ich zu den von mir dokumentierten Ordnern zurückkehren möchte!
Beachten Sie, dass ich bei einer manuellen CD den obersten Verzeichnis-Stapeleintrag (der immer das aktuelle Verzeichnis ist) beeinflusse.
Lass uns jetzt rückwärts navigieren:
Ich kann wieder dokumentieren, was immer ich will, und dann manuell zu einem anderen Verzeichnis navigieren. Dann kann ich problemlos zu dem dokumentierten Verzeichnis zurückkehren, das ich in den Stapel eingefügt habe.
Anwendungsfall 2: Navigieren mit dem numerischen Stapelindex
Nehmen wir an, ich habe mit pushd dir4 dir3 dir2 dir1 gepusht, jetzt zeigt dir -v:
Jetzt können Sie jede Linux-Operation ausführen, bei der Verzeichnisse mithilfe des Stapelindexes verwendet werden:
Sie können sogar einen bestimmten Eintrag aus dem Verzeichnisstapel löschen:
Hoffe, dass die Verwendung der Wörter "documenting" oder die Verwendung des Verzeichnisstapels als eine Art Db das Konzept vereinfacht!
quelle