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ürzencd ..
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 nurpopd
zurückkehren wo ich herkam Normalerweise mache ichpopd >/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 voncd
arbeiten, können Sie sie als stabilere verwenden Lesezeichen alscd -
. - 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 wirdcd
wiepushd
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