Używanie popd bez usuwania ostatniej wartości

8

Jak mogę uzyskać sposób korzystania popdbez faktycznego usuwania ostatniego katalogu ze stosu? Innymi słowy, chcę wrócić do ostatniego katalogu, który ustawiłem pushd, ale chcę, aby pozostał na górze stosu, więc następny popdzabierze mnie do tego samego katalogu (który wciąż będzie na górze stos) ponownie.

Freedom_Ben
źródło
Czy „cd -” nie będzie działać? Jeśli rozumiem, sekwencja jest następująca: „pushd d1; pushd d2; pushd d3;” a teraz wracam do d2, prawda?
tpb261,
cd -działa, ale tylko wtedy, gdy nie będziesz cdnigdzie indziej, dopóki nie będziesz gotowy popd. Zwykle
odbijam
To oczywiste ... ale jakoś przeoczyłem ukrytą część twojego pytania.
tpb261,

Odpowiedzi:

2

Co powiesz na: cd "$(dirs -l -p | sed -n '2{p;q}')"

Glenn Jackman
źródło
Wspaniale! Dziękuję! To trochę bash-fu, jeśli go kiedykolwiek widziałem. Skalowałem to polecenie do peekd(coś w stylu C ++ STL i łatwe do zapamiętania), więc mogę po prostu pisać, peekdaby uzyskać zachowanie. alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben
3
@ Freedom_Ben Można to uprościć docd "$(dirs +1)"
Gilles 'SO- przestań być zły'
@Gilles Kiedy próbuję to zrobić, mówi „bash: cd <mój katalog>: Brak takiego pliku lub katalogu”, nawet jeśli wyraźnie istnieje. Czy wiesz dlaczego tak jest? Czy cd nie interpretuje <mój katalog> poprawnie jako ścieżki? Z komunikatu o błędzie wygląda na to, że powinien działać. tzn. <mój katalog> wygląda poprawnie i jeśli po prostu wpisuję „cd <mój katalog>”, to działa.
nukeguy
1
@nukeguy Czy <my directory>zaczyna się tyldą? W moim powyższym komentarzu brakowało -lopcji wyświetlenia pełnego katalogu zamiast używania ~skrótu. Powinno byćcd "(dirs -l +1)"
Gilles „SO- przestań być zły”
@Gilles Tak! Właśnie tego szukałem, dzięki! Być może powinieneś zamieścić swój komentarz jako osobne rozwiązanie - moim zdaniem jest to najbardziej ogólna i przydatna opcja w tym wątku.
nukeguy
10

pushd bez argumentów zamienia dwa górne wpisy na stosie, pozwalając na efektywne cd między nimi.

Zaczynając w d1, wykonaj pushd d2 dodaje d1 i d2 do stosu i pozostawia cię w d2. Wykonaj ponownie pushd bez argumentów, a wrócisz do d1 z odwróconymi stosami d1 i d2 na stosie.

Stephen Davison
źródło
6

Jeśli dobrze zrozumiałem, możesz pushd .zaraz po tym, popdaby popkatalog ed został ponownie umieszczony na górze stosu.

Eric Carvalho
źródło
Wow, to bardzo proste i eleganckie rozwiązanie. Dzięki!
Freedom_Ben