การลบหรือล้างสแต็กของเส้นทาง popd / pushd


39

หลังจากเข้ามาpushdหลายครั้งเกินไปฉันต้องการล้างเส้นทางทั้งหมด

ฉันจะpopdทำรายการทั้งหมดในสแต็คได้อย่างไร

ฉันต้องการpopdโดยไม่จำเป็นต้องรู้ว่ามีจำนวนเท่าใดในสแต็ก

คู่มือการทุบตีไม่ได้ดูเหมือนจะครอบคลุมนี้

ทำไมฉันต้องรู้สิ่งนี้ ฉันจุกจิกและทำความสะอาดกอง


1
BTW คู่มือทุบตีสมบูรณ์สิ้นสุดแล้วที่ gnu.org หากคุณใช้ทั้งหมดในเวอร์ชันหน้ามันอาจจะง่ายกว่าที่จะหาสิ่งที่มี
jw013

พึงปรารถนาให้ Google จัดทำดัชนีอันนั้น ขอบคุณ @ jw013
chrisjlee

คำตอบ:


47

dirs -c คือสิ่งที่คุณกำลังมองหา


1
นี้ไม่ว่างสแต็ค แต่ไม่ได้เรียกคืนไดเรกทอรีการทำงานจากด้านล่างสแต็ค
Eliran มาลกา

8

เพื่อให้ทั้งสแต็กว่างและเรียกคืนไดเร็กทอรีการทำงานจากด้านล่างสแต็ก:

  • เรียกคืนไดเร็กทอรีdirsนั้นเปลี่ยนเป็นไดเร็กทอรีนั้นและล้างค่าสแต็ก:

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

    -lตัวเลือกที่นี่จะแสดงรายการเส้นทางเต็มรูปแบบเพื่อให้แน่ใจว่าเราไม่ได้ล้มเหลวถ้าเราพยายามที่จะcdเข้ามา~และ-0ดึงรายการแรกจากด้านล่างสแต็ค

    @ jw013 แนะนำให้ทำให้คำสั่งนี้แข็งแกร่งขึ้นโดยหลีกเลี่ยงการขยายพา ธ :

    pushd -0 && dirs -c
  • หรือpopdจนกว่าคุณจะพบข้อผิดพลาด (ซึ่งเป็นสถานะของการpopdโทรเมื่อสแต็กไดเรกทอรีว่างเปล่า):

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

1
วิธีแรกคือสิ่งที่ฉันต้องการ ที่สองจะไม่ทำงานในกรณีของฉันตั้งแต่ฉันเรียกpushdสองสามครั้งแล้วลบหนึ่งในไดเรกทอรีที่อยู่ตรงกลางแล้วpopdก็ล้มเหลวเมื่อฉันพยายามยกเลิกการเปิด ฉันต้องกระโดดข้ามสิ่งกีดขวางที่อยู่ตรงกลางเพื่อกลับไปยังจุดเริ่มต้น
Chuck Wilbur

ขวา @ChuckWilbur - ถ้าคุณตะกายสแต็ค dir ที่popdจะไม่บันทึกคุณ :)
Eliran มาลกา

จะดีกว่าแทนpushd -0 cd "$(dirs ...)"
jw013

@ jw013 เหรอ? ที่จะยุ่งกับกอง dir มากยิ่งขึ้น (ซึ่งเรากำลังพยายามที่จะชัดเจนที่นี่ .. )
Eliran Malka

1
cd "$(...)"ใช้งานได้ 90% อาจเป็น 99% ของเคสที่ใช้ แต่pushd -0คุณสามารถพูดได้อย่างมั่นใจ 100% มี gotchas ที่อาจเกิดขึ้นจำนวนมากและกรณีขอบที่เกี่ยวข้องกับการขยายเส้นทางแฟ้ม / ไดเรกทอรีในเปลือกว่าสิ่งที่มีประสิทธิภาพมากที่สุดที่จะทำคือเพียงแค่หลีกเลี่ยงได้โดยสิ้นเชิงซึ่งpushd -0ไม่ได้เป็นอย่างรัดกุม ไม่มีโอกาสที่จะถูกดักจับด้วยบั๊กด้วยเคสขอบแปลก ๆ หากคุณไม่เสี่ยง หากคุณต้องการอ่านเพิ่มเติมเกี่ยวกับอาการปวดหัวที่เป็นไปได้ที่เกี่ยวข้องกับชื่อไฟล์ / พา ธ ของ Unix จุดเริ่มต้นที่ดีคือmywiki.wooledge.org/ParsingLs
jw013
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.