Popd verwenden, ohne den letzten Wert zu entfernen

8

Wie kann ich das Verwendungsverhalten ermitteln, popdohne das letzte Verzeichnis vom Stapel zu entfernen? Mit anderen Worten, ich möchte zurück zum letzten Verzeichnis navigieren, mit dem ich festgelegt habe pushd, aber ich möchte, dass es oben im Stapel popdbleibt, damit das nächste Verzeichnis mich zu demselben Verzeichnis führt (das sich immer noch oben im Verzeichnis befindet) wieder stapeln).

Freedom_Ben
quelle
Funktioniert "cd -" nicht? Wenn ich verstehe, lautet die Reihenfolge: "pushd d1; pushd d2; pushd d3;" und jetzt zurück zu d2, richtig?
tpb261
cd -funktioniert, aber nur, wenn Sie cdnirgendwo anders sind, bis Sie dazu bereit sind popd. Normalerweise
hüpfe
Das ist offensichtlich ... aber irgendwie habe ich den impliziten Teil Ihrer Frage verpasst.
tpb261

Antworten:

2

Wie wäre es mit: cd "$(dirs -l -p | sed -n '2{p;q}')"

Glenn Jackman
quelle
Großartig, danke! Das ist ein Bash-Fu, wenn ich es jemals gesehen habe. Ich aliased diesen Befehl zu peekd(Art von C ++ STL-ish und einfach für mich zu erinnern), so kann ich nur geben , peekddas Verhalten zu bekommen. alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben
3
@Freedom_Ben Dies kann vereinfacht werden, umcd "$(dirs +1)"
Gilles 'SO- hör auf böse zu sein'
@ Gilles Wenn ich das versuche, heißt es "bash: cd <mein Verzeichnis>: Keine solche Datei oder kein solches Verzeichnis", obwohl es eindeutig existiert. Weißt du warum das so ist? Interpretiert cd <mein Verzeichnis> nicht richtig als Pfad? Aus der Fehlermeldung geht hervor, dass es funktionieren sollte. Das heißt, <mein Verzeichnis> sieht korrekt aus und wenn ich einfach "cd <mein Verzeichnis>" eingebe, funktioniert es.
Nukeguy
1
@nukeguy Beginnt <my directory>mit einer Tilde? In meinem obigen Kommentar fehlte die -lOption, das vollständige Verzeichnis aufzulisten, anstatt die ~Abkürzung zu verwenden. Es sollte seincd "(dirs -l +1)"
Gilles 'SO - hör auf böse zu sein'
@ Gilles Ja! Genau das habe ich gesucht, danke! Vielleicht sollten Sie Ihren Kommentar als separate Lösung veröffentlichen - meiner Meinung nach ist dies die allgemeinste und nützlichste Option in diesem Thread.
Nukeguy
10

pushd ohne Argumente tauscht die beiden obersten Einträge auf dem Stapel aus, sodass Sie effektiv zwischen ihnen hin- und herschalten können.

Wenn Sie in d1 beginnen, führen Sie pushd aus. D2 fügt d1 und d2 zum Stapel hinzu und belässt Sie in d2. Führen Sie pushd erneut ohne Argumente aus, und Sie befinden sich wieder in d1, wobei d1 und d2 auf dem Stapel umgekehrt sind.

Stephen Davison
quelle
6

Wenn ich es richtig verstanden habe, könnten Sie pushd .gleich danach popddas poped-Verzeichnis wieder oben auf dem Stapel platzieren.

Eric Carvalho
quelle
Wow das ist eine sehr einfache und elegante Lösung. Vielen Dank!
Freedom_Ben