Entfernen oder Löschen eines Stapels von Popd / Pushd-Pfaden


39

Nachdem pushdich zu oft gearbeitet habe, möchte ich den gesamten Stapel von Pfaden löschen.

Wie würde ich popdalle Artikel im Stapel?

Ich möchte popdohne zu wissen, wie viele im Stapel sind?

Das Bash-Handbuch scheint dies nicht zu behandeln .

Warum muss ich das wissen? Ich bin wählerisch und muss den Stapel ausräumen.


1
Übrigens ist das komplette Bash-Handbuch bei gnu.org zu Ende. Wenn Sie die All-on-One-Page-Version verwenden, ist es möglicherweise einfacher, dort etwas zu finden.
Jw013

Ich wünschte, Google indizierte diese. Thanks @ jw013
chrisjlee

Antworten:


47

dirs -c ist was Sie suchen.


1
dies tut der Stapel leer, wird aber nicht das Arbeitsverzeichnis aus dem Stapelboden wiederherstellen
Eliran Malka

8

Um sowohl den Stapel leeren und das Arbeitsverzeichnis aus dem Stapelboden wiederherzustellen, entweder:

  • Rufen Sie dieses Verzeichnis ab dirs, wechseln Sie in dieses Verzeichnis und löschen Sie den Stack:

    cd "$(dirs -l -0)" && dirs -c

    Die -lOption hier listet vollständige Pfade auf, um sicherzustellen, dass wir nicht versagen, wenn wir versuchen, auf cdzuzugreifen ~, und -0ruft den ersten Eintrag vom unteren Stapel ab.

    @ jw013 schlug vor, diesen Befehl robuster zu machen, indem Pfaderweiterungen vermieden wurden:

    pushd -0 && dirs -c
  • oder, popdbis Sie auf einen Fehler stoßen (dies ist der Status eines popdAufrufs, wenn der Verzeichnisstapel leer ist):

    while (( $? == 0 )); do popd; done

1
Die erste Methode ist genau das, was ich wollte. Die zweite Funktion würde in meinem Fall nicht funktionieren, da ich pushdein paar Mal angerufen hatte, dann eines der Verzeichnisse in der Mitte entfernt hatte und dann popdbeim Versuch, mich zu entrollen , fehlgeschlagen war. Ich musste über all das verdammte Zeug in der Mitte springen, um wieder dorthin zu gelangen, wo ich angefangen hatte.
Chuck Wilbur

right @ChuckWilbur - Wenn Sie den Dir-Stack verschlüsselt haben, popdwerden Sie nicht gerettet :)
Eliran Malka

Es ist besser, pushd -0statt cd "$(dirs ...)".
jw013

@ jw013 wie so? das würde den dir Stack noch mehr durcheinander bringen (was wir hier versuchen zu klären ..)
Eliran Malka

1
cd "$(...)"funktioniert in 90%, wahrscheinlich sogar in 99% der Anwendungsfälle, aber mit pushd -0100% kann man getrost sagen. Es gibt so viele potenzielle Fallstricke und Kantenfälle, die mit dem Erweitern von Datei- / Verzeichnispfaden in der Shell verbunden sind, dass das Robusteste darin besteht, sie ganz zu vermeiden, was pushd -0sehr präzise ist. Es gibt keine Chance, von einem Käfer mit einem seltsamen Rand erwischt zu werden, wenn Sie niemals das Risiko eingehen. Wenn Sie mehr über die möglichen Probleme
möchten,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.