Wie verwende ich die Befehle pushd und popd?

Was sind die praktischen Anwendungen von pushd und popd Wenn die Verwendung dieser beiden Befehle gegenüber cd und cd -?

EDIT : Ich suche nach praktischen Verwendungsbeispielen für diese beiden Befehle oder nach Gründen, um den Stapel mit Verzeichnissen zu behalten (wenn Sie die Tabulatur vervollständigen, cd -, Aliase zum Verkürzen von cd .. usw.).

Antwort

pushd , popd und dirs sind Shell-Buildins, die Sie können den -Verzeichnisstapel bearbeiten. Dies kann verwendet werden, um Verzeichnisse zu ändern, aber zu dem Verzeichnis zurückzukehren, aus dem Sie gekommen sind.

Zum Beispiel

Starten Sie mit den folgenden Verzeichnissen:

$ pwd /home/saml/somedir $ ls dir1 dir2 dir3 

Pushd to 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 das ursprüngliche Verzeichnis somedir. HINWEIS: Unsere “ aktuelle “ ist ~/somedir/dir1.

wird an ../dir3 gesendet (weil wir uns jetzt in dir1 befinden).

$ 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 anfangen, Verzeichnisse zu öffnen Aus, sie kommen auch von links.

Ändern Sie die Verzeichnisse manuell in ../dir2

$ cd ../dir2 $ pwd /home/saml/somedir/dir2 $ dirs ~/somedir/dir2 ~/somedir/dir1 ~/somedir 

Starten Sie nun das Löschen von Verzeichnissen

$ popd ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir1 

Beachten Sie, dass wir zu dir1 zurückgekehrt sind.

Pop wieder …

$ popd ~/somedir $ pwd /home/saml/somedir 

Und wir sind wieder da, wo wir angefangen haben, somedir.

Könnte etwas verwirrend werden, aber der Kopf des Stac k ist das Verzeichnis, in dem Sie sich gerade befinden. Wenn wir also zu somedir zurückkehren, obwohl dirs dies anzeigt:

$ dirs ~/somedir 

Unser Stapel ist tatsächlich leer.

$ popd bash: popd: directory stack empty 

Kommentare

  • Danke, ich verstehe das Konzept des Stapels und die Funktionsweise dieser Befehle vollkommen. Ich ‚ suche jedoch nach praktischen Gründen, um den Stapel mit Verzeichnissen zu halten (wenn Sie die Tab-Vervollständigung haben, cd -, Aliase zum Kürzen cd .. usw.).
  • Ich verwende häufig pushd & popd In Skripten b / c ersparen sie mir, dass ich mich nicht mehr daran erinnern muss, woher ich komme. Ich kann immer nur popd zurückkehren wo ich herkam Normalerweise mache ich popd >/dev/null 2>&1, um es still zu machen. Ich benutze jeden Tag CD in meiner Shell. In diesem Artikel finden Sie noch einige weitere Tipps zur Zeitersparnis: thegeekstuff.com/2008/10/… .
  • @Garrett – keine, die ich mir vorstellen kann.
  • @Garrett @slm, da cd - nur das letzte Verzeichnis verfolgt, wie ich mir vorstellen kann Probleme können auftreten, wenn Sie eine Funktion aufrufen, die das Verzeichnis auch intern ändert. In diesem Fall wird die Funktion zurückgesetzt – in Ihr aktuelles Verzeichnis, nicht in das Verzeichnis, in das Sie zurückkehren möchten. pushd / popd ist die sicherste Methode. Hinweis: Ich habe ‚ meine Theorie nicht getestet.
  • Warum nicht nach dem ersten iv zu ~/somedir/dir3 zurückkehren? id = „9a953f50f0“>

?

Antwort

Es gibt ein wirklich nützlicher Anwendungsfall für die Befehle pushd und popd für die gleichzeitige Arbeit mit mehreren Ordnern.

Sie können sehr einfach im Stapel navigieren, da er aufgelistet ist. Das heißt, Sie können während der Arbeit mehrere Arbeitsordner zur Verfügung haben.

Siehe ein einfaches Beispiel unten.


Zuerst erstellen wir eine Beispielordnerstruktur.

 user@vb:~$ mkdir navigate user@vb:~/navigate$ mkdir dir1 user@vb:~/navigate$ mkdir dir2 user@vb:~/navigate$ mkdir dir3 

Dann können Sie alle Ihre Ordner zum Stapel hinzufügen :

 user@vb:~/navigate$ pushd dir1/ ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir1$ pushd ../dir2/ ~/navigate/dir2 ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir2$ pushd ../dir3/ ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate 

Sie können Folgendes nachschlagen:

 user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir2 2 ~/navigate/dir1 3 ~/navigate 

Um sicher zu navigieren, Sie müssen den letzten (Null-) Ordner zweimal hinzufügen, da er immer neu geschrieben wird:

 user@vb:~/navigate/dir3$ pushd . user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate 

Jetzt können Sie durch diese Ordner springen und damit arbeiten Stapel wie bei Aliasnamen für die Ordner.Ich denke, der folgende Teil ist selbsterklärend:

 user@vb:~/navigate/dir3$ cd ~4 user@vb:~/navigate$ dirs -v 0 ~/navigate 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate$ cd ~3 user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate/dir1$ touch text.txt user@vb:~/navigate/dir1$ cp text.txt ~2 user@vb:~/navigate/dir1$ ls ~2 text.txt user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate 

Zusätzlicher Tipp erstellt einen Alias für dirs -v.

Zum Beispiel:

# In ~/.bashrc alias dirs="dirs -v" 

Kommentare

  • Und Sie können den Stapel löschen, indem Sie dirs -c
  • +1 für tatsächlich einige praktische Beispiele geben. ‚ ist auf der Manpage leicht zu erkennen, was pushd / popd tut, aber dirs und cd ~ # sind zunächst nicht offensichtlich.
  • können Sie auch verwenden Eine Lösung wie fasd für diese Art von Workflow, obwohl
  • @Jun, ‚ s “ mkdir dir {1,2,3} „, um 3 Verzeichnisse auf einmal zu erstellen.
  • @JunMurakami das hat mein Jahr gemacht! Happy 2020!

Antwort

Ein einfacher Anwendungsfall für die Verwendung von dirs stack ist, was Sie mit cd nicht tun können :

pushd . fügt das aktuelle Verzeichnis XX zum dirs -Stack hinzu. Anschließend können Sie sich mit cd bewegen. Um zu XX zurückzukehren, führen Sie einfach popd aus, unabhängig davon, wie weit Sie entfernt sind der Verzeichnisbaum (kann über mehrere Ebenen, seitwärts usw. springen). Besonders nützlich in Bash-Skripten.

Kommentare

  • Ich denke, dies ist die Funktion, die ich am häufigsten nutze. Da pushd / popd unabhängig von cd arbeiten, können Sie sie als stabilere verwenden Lesezeichen als cd -.
  • für mich ist dies nicht wahr. Jedes Mal, wenn ich CD verwende, ändert sich mein Stapel.
  • Oh, das war, weil ich zsh verwendet habe. Wenn ich zu Bash wechsle, funktioniert es einwandfrei.
  • Dies ist die einzige inhaltliche Antwort in Bezug auf einen Vergleich mit cd -, IMO. Ob Pushd Foo; < zufällige Verzeichnisänderung >; popd ist mehr wert als a = foo; cd $ a; < zufällige Verzeichnisänderung >; cd $ a … Für Skripte sehe ich eine winzige syntaktische Bequemlichkeit in der ersteren (pushd), aber eine massive Verbesserung der Klarheit in der letzteren ([explizite] Variablen!). Für eine interaktive Sitzung würde ich einfach davon ausgehen, dass meine Verzeichnishierarchie überhaupt richtig organisiert ist, und wenn ich mich verlaufen habe, einfach cd ~ / back / to / offensichtlicher / Pfad.
  • @HarendraSingh du ziehst an ‚ ist AUTO_PUSHD nicht gesetzt? Dadurch wird cd wie pushd verhalten, deaktiviert es und Sie ‚ kehren zurück zu “ normales Verhalten „.

Antwort

pushd und popd ermöglichen es Ihnen, die Verzeichnisse auf dem Stapel zu bearbeiten.

Wenn Sie pushd ein Verzeichnis erstellen, legen Sie das aktuelle Verzeichnis auf den Stapel und ändern das Verzeichnis in das als Parameter angegebene Verzeichnis.

popd ermöglicht es Ihnen, zum Verzeichnis auf dem Stapel zurückzukehren.

Wenn Sie 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.

Antwort

Für bash im Grunde: Anstatt CD zu verwenden, kann man Verwenden Sie pushd, um Verzeichnisse zu ändern. Bei praktischer Anwendung: Der Verlauf der besuchten Verzeichnisse wird gespeichert (korrekt: gestapelt) und man kann zwischen ihnen wechseln:

pushd /home; pushd /var; pushd log 

Um den Stapel anzuzeigen, verwenden Sie dirs und zur einfacheren Navigation (um die Nummern der “ Stapeleinträge “ zu erhalten, verwenden Sie:

dirs -v 

Ausgabe:

me@myhost:/home$ dirs -v 0 /home 1 /var 2 /tmp 

Verwenden Sie diese Zahlen nun mit cd und ~ wie:

cd ~1 

Aber diese Nummern werden jetzt neu angeordnet und positionieren “ 0 “ ändert sich, also pushd das Verzeichnis zweimal an die oberste Position bringen (oder verwenden) ein Dummy an Position 0) wie:

me@myhost:/home$ dirs -v 0 /home 1 /home 2 /var 3 /tmp 

Jetzt behält 1..3 ihre Position

bei (um das aktuelle Verzeichnis freizugeben Verwenden Sie für den Stapel / das Löschen aus dem Verlauf popd)

Antwort

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 sehr verwirrend ist.

Ich sehe das anders:

pushd [Ordnername] – wird auf [Ordnername] cd und dokumentiert das Ziel, das [Ordnername] in einem Verzeichnisstapel im obersten Verzeichnis ist Im Stapel befindet sich immer das aktuelle Verzeichnis, in dem Sie sich befinden.

popd – Sie werden zuerst in eine CD aufgenommen den Verzeichnisdatensatz, der sich dann oben auf dem Stapel befindet, und entfernen Sie die Dokumentation (entfernen Sie sie aus dem Verzeichnisstapel)

dirs – Gibt den Verzeichnisstapel aus (kann als Verzeichnis-Datenbank behandelt werden, wobei der Eintrag ganz links das aktuelle Verzeichnis (oben im Stapel) ist.

Die 2 beliebtesten Anwendungsfälle sind also:

Anwendungsfall 1: Navigieren mit pushd und popd

root@mypc:/main/$ ls dir1 dir2 dir3 dir4 root@mypc:/main/$ dirs # prints the current stack /main root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now: /main/dir1 /main root@mypc:/main/dir1$ # I am now in /main/dir1 root@mypc:/main/dir1$ # Now let"s go wild and document whatever I want root@mypc:/main/dir1$ pushd ../dir2 root@mypc:/main/dir2$ # Woo I am in /main/dir2 root@mypc:/main/dir2$ pushd ../dir3 root@mypc:/main/dir3$ # Woo I am in /main/dir3 root@mypc:/main/dir3$ pushd ../dir4 root@mypc:/main/dir4$ # Woo I am in /main/dir4 root@mypc:/main/dir4$ dirs # Now dir stack is: /main/dir4 /main/dir3 /main/dir2 /main/dir1 /main 

Sagen wir mal Ich habe das oben Genannte getan, da ich zu den von mir dokumentierten Ordnern zurück navigieren möchte!

Beachten Sie, dass ich bei einer manuellen CD den obersten Verzeichnisstapeleintrag (der immer das aktuelle Verzeichnis ist)

root@mypc:/main/dir4$ cd .. # Now dir stack is: # (note that /main appear in the leftmost as well which is the top of the stack) /main /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ 

Lassen Sie uns jetzt rückwärts navigieren:

root@mypc:/main$ popd root@mypc:/main$ # Still in /main since it was at the top of the dir stack root@mypc:/main$ dirs # Stack is now: /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ popd root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2 root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1 root@mypc:/main/dir1$ dirs # Stack is now: /main 

Ich kann wieder jedes gewünschte Dokument dokumentieren Wenn Sie dann manuell zu einem anderen Verzeichnis navigieren, 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. Wenn Sie jetzt dir -v ausführen, wird Folgendes angezeigt:

root@mypc:/main$ dirs -v 0 /main/dir1 (this is the current dir you are in always) 1 /main/dir2 2 /main/dir3 3 /main/dir4 

Jetzt können Sie jede Linux-Operation ausführen, bei der Verzeichnisse mit dem Stapelindex verwendet werden:

root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like: # cp /main/dir2/temp.txt /main/dir3/new_temp.txt 

Sie können sogar eine bestimmte löschen Eintrag aus dem Verzeichnisstapel:

root@mypc:/main$ popd ~4 

Hoffe, dass die Verwendung der Wörter „dokumentieren“ oder denken Sie an den Verzeichnisstapel, da sich eine Art Datenbank vereinfacht das Konzept!

Antwort

Einfach ausgedrückt – wenn Sie zwischen mehr als 2 Verzeichnissen navigieren müssen, normalerweise mehrmals zurück & her, da cd - es nur mit 2 Ordnern schneidet.

Also zum Beispiel Anstatt zu versuchen, frühere lange Pfade wiederzugeben, indem Sie sich den Verlauf Ihres Puffers ansehen oder einen langen Pfad mit der Registerkarte vervollständigen, stapeln Sie einfach die wichtigen Pfade und gehen bei Bedarf bequem allein anhand ihrer Nummer zu ihnen. Das Wechseln zwischen komplexen Verzeichnisstrukturen und langen Pfaden wird schnell und einfach.

Mit den integrierten Funktionen können Sie den Stapel auch neu anordnen oder die Verzeichnisse herausspringen lassen, die Sie nicht mehr benötigen, um Flexibilität in Ihrem Arbeitsablauf zu ermöglichen.

Das Stapeln von Verzeichnissen kann auch in Skripten für Vorgänge verwendet werden, die mehrere Verzeichnisse umfassen.

Antwort

I. Ich fand die Verwendung von dirs / popd / pushd etwas unangenehm. Ich fand meine persönliche Lösung in tcsh, indem ich den folgenden Code in .alias

 foreach b (. , - 0 1 2 3 4 5 6 7 8 9 ) alias p$b "set a=`pwd`; echo $a >! ~/.mydir"$b alias cd$b "cd "`cat ~/.mydir"$b"`"" alias del$b "rm -v ~/.mydir"$b alias home$b "set a="~"; echo $a >! ~/.mydir"$b end alias cdl "grep / ~/.mydir*" 

einfügte Auf diese Weise habe ich beispielsweise „p“ als Alias verwendet, um das aktuelle Arbeitsverzeichnis in der Datei ~ / .mydir. zu speichern, und „cd.“, um dieses Verzeichnis wiederherzustellen, wann und wo immer ich möchte. „del.“ entfernt die entsprechende Datei. „home.“ setzt das Verzeichnis auf das Ausgangsverzeichnis (entspricht cd; p.); „cdl“ listet die gespeicherten Verzeichnisse auf. Beachten Sie, dass Sie ~ / Dropbox / .mydir $ b (oder einen anderen Cloud-Dienst wie) verwenden zB ownCloud) anstelle von ~ / .mydir $ b erhalten Sie einen intelligenten Weg um Ihre bevorzugten Verzeichnisse für verschiedene Konten und Computer zu verwenden.

Antwort

Verwenden Sie cd und cd - können Sie nur zwischen Ihren beiden zuletzt verwendeten Verzeichnissen wechseln. Ihre Größe für „Verzeichnis-Arbeitssätze“ beträgt zwei.

Mit pushd können Sie eine beliebig große Anzahl von Verzeichnissen in Ihrem Arbeitssatz behalten.

Ich verwende die meiste Zeit pushd anstatt cd. Sobald Sie mit pushd directory_name einen Stapel aktiver Verzeichnisse aufgebaut haben, können Sie mit pushd ~# den ganzen Tag zwischen ihnen wechseln. P. >

pushd dir1 pushd ../dir2 pushd /full/path/to/dir3 # There are now three directories in the stack. pushd ~3 pushd ~2 # The same three directories are still on the stack, # just in a different order. 

Ich verwende popd selten, nur wenn ich ein Verzeichnis vom Stapel entfernen möchte, wenn ich weiß, dass ich fertig bin Verwenden dieses Verzeichnisses.

Gehen Sie zum Verzeichnis und entfernen Sie es vom Stapel:

popd ~2 

Bleiben Sie im aktuellen Verzeichnis und entfernen Sie ein anderes Verzeichnis aus dem Stapel:

popd +2 

Am Ende haben Sie einen Arbeitsstil, der dem Öffnen mehrerer Terminalfenster oder Registerkarten ähnelt (eines für jedes Verzeichnis, in dem Sie aktiv sind funktioniert), aber alles in einem Terminal.Dies spart Bildschirmfläche und da die Verzeichnispfade alle in einer Shell verfügbar sind, können Sie Folgendes tun:

  • Dateien zwischen Verzeichnissen kopieren, mit denen Sie gerade arbeiten
  • Anzeigen oder Bearbeiten von Dateien in einem anderen Verzeichnis, ohne dorthin zu gehen

Beispiele:

cp ~2/myfile.txt ~4 less ~2/myfile.txt 

In tcsh (aber nicht bash), Sie können Ihren Verzeichnisstapel sogar in einer Datei speichern und später wiederherstellen.

Speichern:

dirs -S ~/dirstack 

Wiederherstellen:

dirs -L ~/dirstack 

Andernfalls ersetzen Sie einfach ~ in den Beispielen bash mit = zur Verwendung in tcsh.

pushd =2 popd =4 popd +1 

Antwort

Ich verwende es so in meinem bash_profile und .bashrc wie folgt

vi .bash_profile alias dirs="dirs -v" source d.sh :wq vi .bashrc alias dirs="dirs -v" :wq vi d.sh pushd ~/Documents/GIT/seiso-data pushd ~/Documents/GIT/ewe/EosRegistry pushd ~/Documents/GIT_LODGING/site-cookbooks pushd ~/Documents/CHEF_LODGING pushd . :wq 

es hilft s ich springe zwischen Verzeichnissen zu den zuletzt auf meinem Terminal verwendeten. 🙂 Ich hoffe, es hilft Ihnen, pushd zu verwenden, eher popd, ich verwende cd ~ stackednumber

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.