Menggunakan popd tanpa menghapus nilai terakhir

8

Bagaimana saya bisa mendapatkan perilaku menggunakan popdtanpa benar-benar membuka direktori terakhir dari stack? Dengan kata lain, saya ingin menavigasi kembali ke direktori terakhir yang saya set dengan pushd, tetapi saya ingin tetap di bagian atas tumpukan sehingga selanjutnya popdakan membawa saya ke direktori yang sama (yang masih akan berada di atas tumpukan) lagi.

Freedom_Ben
sumber
Tidak akan "cd -" bekerja? Jika saya mengerti, urutannya adalah: "pushd d1; pushd d2; pushd d3;" dan sekarang kembali ke d2, kan?
tpb261
cd -bekerja, tetapi hanya jika Anda tidak di cdtempat lain sampai Anda siap popd. Saya biasanya melompat-lompat ke beberapa tempat sebelum saya siap untuk kembali
Freedom_Ben
Itu sudah jelas .. tetapi entah bagaimana saya melewatkan bagian "bouncing" tersirat dari pertanyaan Anda.
tpb261

Jawaban:

2

Bagaimana tentang: cd "$(dirs -l -p | sed -n '2{p;q}')"

glenn jackman
sumber
Luarbiasa, terimakasih! Itu beberapa bash-fu jika aku pernah melihatnya. Saya alias perintah itu peekd(jenis C ++ STL-ish dan mudah bagi saya untuk mengingat), jadi saya bisa mengetik peekduntuk mendapatkan perilaku. alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben
3
@Freedom_Ben Ini bisa disederhanakan untukcd "$(dirs +1)"
Gilles 'SO- berhenti bersikap jahat'
@Gilles Ketika saya mencoba melakukan ini, ia mengatakan "bash: cd <direktori saya>: Tidak ada file atau direktori" meskipun itu jelas ada. Apakah Anda tahu mengapa demikian? Apakah cd tidak menafsirkan <direktori saya> dengan benar sebagai jalur? Dari pesan kesalahan, sepertinya itu harus berfungsi. yaitu, <direktori saya> terlihat benar dan jika saya cukup ketik "cd <direktori saya>", itu berfungsi.
nukeguy
1
@nukeguy Apakah <my directory>mulai dengan tilde? Komentar saya di atas tidak ada -lopsi untuk daftar direktori lengkap daripada menggunakan ~singkatan. Seharusnyacd "(dirs -l +1)"
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Ya! Itulah tepatnya yang saya cari, terima kasih! Mungkin Anda harus memposting komentar Anda sebagai solusi terpisah - menurut saya, ini adalah opsi yang paling umum dan berguna di utas ini.
nukeguy
10

pushd tanpa argumen menukar dua entri teratas pada stack, memungkinkan Anda untuk secara efektif bolak-balik di antara mereka.

Mulai dari d1, jalankan pushd d2 menambahkan d1 dan d2 ke stack dan membuat Anda dalam d2. Jalankan pushd lagi tanpa argumen, dan Anda kembali ke d1 dengan d1 dan d2 terbalik di tumpukan.

Stephen Davison
sumber
6

Jika saya mengerti dengan benar, Anda bisa pushd .saja setelah popditu popdirektori ed akan ditempatkan lagi di bagian atas tumpukan.

Eric Carvalho
sumber
Wow itu solusi yang sangat mudah dan elegan. Terima kasih!
Freedom_Ben