menghapus atau membersihkan tumpukan jalur popd / pushd

39

Setelah pushdterlalu banyak kali, saya ingin menghapus seluruh tumpukan jalan.

Bagaimana saya popdsemua barang di tumpukan?

Saya ingin popdtanpa perlu tahu berapa banyak yang ada di tumpukan?

Manual bash sepertinya tidak membahas hal ini .

Mengapa saya perlu tahu ini? Saya teliti dan untuk membersihkan tumpukan.

chrisjlee
sumber
1
BTW, manual bash lengkap selesai di gnu.org. Jika Anda menggunakan versi semua pada satu halaman, mungkin lebih mudah untuk menemukan barang di sana.
jw013
Ah berharap google mengindeks yang satu itu. Terima kasih @ jw013
chrisjlee

Jawaban:

47

dirs -c adalah apa yang kamu cari.

jw013
sumber
1
ini tidak mengosongkan tumpukan, tetapi tidak mengembalikan direktori kerja dari dasar tumpukan
Eliran Malka
8

Untuk mengosongkan tumpukan dan mengembalikan direktori kerja dari dasar tumpukan, baik:

  • mengambil direktori itu dari dirs, mengubah ke direktori itu, dan daripada menghapus tumpukan:

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

    The -lpilihan di sini akan daftar path penuh, untuk memastikan kita tidak gagal jika kita mencoba untuk cdmenjadi ~, dan -0mengambil kembali entri pertama dari bawah tumpukan.

    @ jw013 menyarankan untuk membuat perintah ini lebih kuat, dengan menghindari perluasan jalur:

    pushd -0 && dirs -c
  • atau, popdhingga Anda menemukan kesalahan (yang merupakan status popdpanggilan saat tumpukan direktori kosong):

    while (( $? == 0 )); do popd; done
Eliran Malka
sumber
1
Metode pertama persis seperti yang saya inginkan. Yang kedua tidak akan berfungsi dalam kasus saya karena saya telah menelepon pushdbeberapa kali, kemudian menghapus salah satu direktori di tengah, kemudian popdgagal ketika saya mencoba membuka gulungannya. Saya perlu melompati semua hal yang bermasalah di tengah untuk kembali ke tempat saya mulai.
Chuck Wilbur
right @ChuckWilbur - jika Anda mengacak tumpukan dir, popdtidak akan menyelamatkan Anda :)
Eliran Malka
Lebih baik pushd -0daripada tidak cd "$(dirs ...)".
jw013
@ jw013 bagaimana? yang akan mengacaukan tumpukan tumpukan lebih (yang kami coba jelaskan di sini ..)
Eliran Malka
1
cd "$(...)"bekerja di 90%, bahkan mungkin 99% dari kasus penggunaan, tetapi dengan pushd -0Anda dapat dengan yakin mengatakan 100%. Ada begitu banyak potensi gotcha dan kasus tepi yang terkait dengan perluasan jalur file / direktori di shell sehingga hal yang paling kuat untuk dilakukan adalah menghindarinya sama sekali, yang pushd -0melakukannya dengan sangat ringkas. Tidak ada kemungkinan tertangkap oleh bug dengan kasus tepi aneh jika Anda tidak pernah mengambil risiko. Jika Anda ingin membaca lebih lanjut tentang kemungkinan sakit kepala yang terkait dengan Unix nama file / path, titik awal yang baik adalah mywiki.wooledge.org/ParsingLs
jw013