GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Navigieren in der Bash-Shell mit pushd und popd

Das pushd und popd Befehle sind integrierte Funktionen der Bash-Shell, mit denen Sie Verzeichnisse mit Lesezeichen versehen können, um schnell zwischen Speicherorten auf Ihrer Festplatte navigieren zu können. Sie haben vielleicht bereits das Gefühl, dass das Terminal eine unglaublich schnelle Möglichkeit ist, auf Ihrem Computer zu navigieren; Mit nur wenigen Tastendrücken können Sie auf Ihrer Festplatte, Ihrem angeschlossenen Speicher oder Ihrer Netzwerkfreigabe überall hingehen. Diese Geschwindigkeit kann jedoch zusammenbrechen, wenn Sie zwischen Verzeichnissen hin und her wechseln oder wenn Sie sich in Ihrem Dateisystem "verirren". Genau das sind die Probleme pushd und popd kann Ihnen bei der Lösung helfen.

pushd

Im einfachsten Fall pushd ist sehr ähnlich wie cd . Es bringt Sie von einem Verzeichnis zum anderen. Angenommen, Sie haben ein Verzeichnis namens one , das ein Unterverzeichnis namens two enthält , die ein Unterverzeichnis namens drei enthält , und so weiter. Wenn Ihr aktuelles Arbeitsverzeichnis eins ist , dann kannst du zu zwei wechseln oder drei oder überall mit der cd Befehl:

$ pwd
eins
$ cd zwei/drei
$ pwd
drei

Sie können dasselbe mit pushd tun :

$ pwd
eins
$ pushd zwei/drei
~/eins/zwei/drei ~/eins
$ pwd
drei

Das Endergebnis von pushd ist dasselbe wie cd , aber es gibt ein zusätzliches Zwischenergebnis:pushd gibt Ihr Zielverzeichnis und Ihren Ausgangspunkt wieder. Dies ist Ihr Verzeichnisstapel , und es macht pushd einzigartig.

Stapel

Ein Stapel bezieht sich in der Computerterminologie auf eine Sammlung von Elementen. Im Kontext dieses Befehls sind die Elemente Verzeichnisse, die Sie kürzlich mit dem pushd besucht haben Befehl. Sie können es sich als Geschichte oder Brotkrumenpfad vorstellen.

Mit pushd können Sie sich über Ihr gesamtes Dateisystem bewegen; Jedes Mal werden Ihre vorherigen und neuen Standorte zum Stapel hinzugefügt:

$ pushd four
~/one/two/three/four ~/one/two/three ~/one
$ pushd five
~/one/two/three/four/ fünf ~/eins/zwei/drei/vier ~/eins/zwei/drei ~/eins

Sobald Sie einen Stapel aufgebaut haben, können Sie ihn als Sammlung von Lesezeichen oder Schnellreise-Wegpunkten verwenden. Nehmen Sie zum Beispiel an, dass Sie während einer Sitzung viel innerhalb der ~/eins/zwei/drei/vier/fünf arbeiten Verzeichnisstruktur dieses Beispiels. Sie wissen, dass Sie einen besucht haben vor kurzem, aber Sie können sich nicht erinnern, wo es sich in Ihrem pushd befindet Stapel. Mit dem +0 können Sie Ihren Stapel anzeigen (das ist ein Pluszeichen gefolgt von einer Null) Argument, das pushd mitteilt nicht in irgendein Verzeichnis in Ihrem Stack zu wechseln, sondern fordert auch pushd auf um Ihren aktuellen Stack wiederzugeben:

$ pushd +0
~/eins/zwei/drei/vier ~/eins/zwei/drei ~/eins ~/eins/zwei/drei/vier/fünf

Alternativ können Sie den Stapel mit den Verzeichnissen anzeigen Befehl, und Sie können die Indexnummer für jedes Verzeichnis anzeigen, indem Sie -v verwenden Möglichkeit:

$ dirs -v
0  ~/eins/zwei/drei/vier
1  ~/eins/zwei/drei
2  ~/eins
3  ~/eins/ zwei/drei/vier/fünf

Der erste Eintrag in Ihrem Stapel ist Ihr aktueller Standort. Das kannst du mit pwd bestätigen wie gewohnt:

$ pwd
~/eins/zwei/drei/vier

Beginnend bei 0 (Ihr aktueller Standort und der erste Eintrag Ihres Stapels), der zweite Element in Ihrem Stack ist ~/one , das ist Ihr gewünschtes Ziel. Mit +2 können Sie sich in Ihrem Stapel vorwärts bewegen Möglichkeit:

$ pushd +2
~/eins ~/eins/zwei/drei/vier/fünf ~/eins/zwei/drei/vier ~/eins/zwei/drei
$ pwd
~/eins

Dadurch ändert sich Ihr Arbeitsverzeichnis in ~/one und hat auch den Stapel so verschoben, dass Ihr neuer Standort vorne ist.

Sie können sich in Ihrem Stapel auch rückwärts bewegen. Zum Beispiel, um schnell zu ~/eins/zwei/drei zu gelangen In Anbetracht der Beispielausgabe können Sie um eins zurückgehen, wobei Sie pushd beachten beginnt mit 0:

$ pushd -0
~/eins/zwei/drei ~/eins ~/eins/zwei/drei/vier/fünf ~/eins/zwei/drei/vier

Hinzufügen zum Stack

Sie können weiterhin auf diese Weise durch Ihren Stack navigieren und es bleibt eine statische Liste Ihrer zuletzt besuchten Verzeichnisse. Wenn Sie ein Verzeichnis hinzufügen möchten, geben Sie einfach den Pfad des Verzeichnisses an. Wenn ein Verzeichnis neu im Stack ist, wird es wie erwartet zur Liste hinzugefügt:

$ pushd /tmp
/tmp ~/eins/zwei/drei ~/eins ~/eins/zwei/drei/vier/fünf ~/eins/zwei/drei/vier

Wenn es jedoch bereits im Stack vorhanden ist, wird es ein zweites Mal hinzugefügt:

$ pushd ~/eins
~/eins /tmp ~/eins/zwei/drei ~/eins ~/eins/zwei/drei/vier/fünf ~/eins/zwei/drei/vier

Während der Stapel oft als Liste von Verzeichnissen verwendet wird, auf die Sie schnell zugreifen möchten, ist er wirklich eine wahre Geschichte dessen, wo Sie gewesen sind. Wenn Sie nicht möchten, dass ein Verzeichnis redundant zum Stack hinzugefügt wird, müssen Sie +N verwenden und -N Schreibweise.

Entfernen von Verzeichnissen aus dem Stack

Ihr Stapel ist offensichtlich nicht unveränderlich. Sie können es mit pushd hinzufügen oder entfernen Sie Elemente mit popd .

Angenommen, Sie haben gerade pushd verwendet um ~/one hinzuzufügen zu Ihrem Stack, wodurch ~/one entsteht Ihr aktuelles Arbeitsverzeichnis. So entfernen Sie das erste (oder "nullte", wenn Sie es vorziehen) Element:

$ pwd
~/eins
$ popd +0
/tmp ~/eins/zwei/drei ~/eins ~/eins/zwei/drei/vier/fünf ~/eins /zwei/drei/vier
$ pwd
~/eins

Natürlich können Sie jedes Element entfernen, beginnend bei 0:

$ pwd ~/eins
$ popd +2
/tmp ~/eins/zwei/drei ~/eins/zwei/drei/vier/fünf ~/eins/zwei/drei/vier
$ pwd ~/eins

Sie können auch popd verwenden von der Rückseite Ihres Stacks, wieder beginnend mit 0. Zum Beispiel, um das letzte Verzeichnis von Ihrem Stack zu entfernen:

$ popd -0
/tmp ~/eins/zwei/drei ~/eins/zwei/drei/vier/fünf

Wenn es so verwendet wird, popd ändert Ihr Arbeitsverzeichnis nicht. Es manipuliert nur Ihren Stack.

Das Standardverhalten von popd , ohne Argumente, soll das erste (nullte) Element aus Ihrem Stack entfernen und das nächste Element zu Ihrem aktuellen Arbeitsverzeichnis machen.

Dies ist vor allem als Schnellwechselbefehl nützlich, wenn Sie beispielsweise in zwei verschiedenen Verzeichnissen arbeiten und sich nur kurz an eine andere Stelle ducken müssen. Sie müssen nicht über Ihren Verzeichnisstapel nachdenken, wenn Sie keine ausführliche Historie benötigen:

$ pwd
~/one
$ pushd ~/one/two/three/four/five
$ popd
$ pwd
~/one

Sie müssen auch nicht pushd verwenden und popd in rascher Folge. Wenn Sie pushd verwenden einen anderen Ort besuchen und sich dann drei Stunden lang ablenken lassen, um einen Fehler zu finden oder Nachforschungen anzustellen, finden Sie Ihren Verzeichnisstapel geduldig wartend vor (es sei denn, Sie haben Ihre Terminalsitzung beendet):

$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; sleep 2001
[...]
$ popd
$ pwd
~/one

Pushd und popd in der realen Welt

Das pushd und popd Befehle sind überraschend nützlich. Sobald Sie sie gelernt haben, werden Sie Ausreden finden, um sie sinnvoll einzusetzen, und Sie werden mit dem Konzept des Verzeichnisstapels vertraut sein. Mit pushd vertraut werden hat mir geholfen, git stash zu verstehen , das nichts mit pushd zu tun hat aber ähnlich in konzeptioneller Imtangibilität.

Mit pushd und popd in Shell-Skripten kann verlockend sein, aber im Allgemeinen ist es wahrscheinlich am besten, sie zu vermeiden. Sie sind außerhalb von Bash und Zsh nicht portierbar und können stumpf sein, wenn Sie ein Skript erneut lesen (pushd +3 ist weniger klar als cd $HOME/$DIR/$TMP oder ähnliches).

Abgesehen von diesen Warnungen können und sollten Sie, wenn Sie ein normaler Bash- oder Zsh-Benutzer sind, pushd ausprobieren und popd .


Linux
  1. Anpassen der Bash-Shell

  2. Schnelle Verzeichnisnavigation in der Bash-Shell?

  3. Der Zweck von .bashrc und wie funktioniert es?

  4. Verstehen Sie die Bedeutung von `$_`?

  5. Variablenbereich für Bash-Shell-Skripte und Funktionen im Skript

Überwachen Sie Befehle und Aufgaben mit dem Linux-Überwachungsbefehl

Importieren Sie Funktionen und Variablen mit dem Quellbefehl in Bash

Pushd- und Popd-Befehle unter Linux

Navigationstipps für die Linux-Befehlszeile:Die Grundlagen der Befehle pushd und popd

Herunterladen von Dateien mit Wget auf der Linux-Shell - Erklärung und Beispiele

Was ist der Unterschied zwischen &> und >&in bash?