มันเป็นไปได้ที่จะลบไดเรกทอรีเมื่ออยู่ในไดเรกทอรีในเปลือก


0

ฉันมีไดเรกทอรีที่ฉันเรียกใช้โปรแกรมมา
/ usr / bin / my-dir

ฉันต้องเรียกใช้โปรแกรมจากภายในไดเรกทอรีดังนั้นฉันต้องไป cd / usr / bin / my-dir ./my-program

ฉันมีสคริปต์ที่จากเครื่องรีโมตอัพเดตโปรแกรมของฉันเช่นนี้: rm -rf / usr / bin / my-dir mv my-program / usr / bin / my-dir

ปัญหาคือเมื่อฉันได้ ssh ลงในเครื่องและอยู่ในไดเรกทอรี / usr / bin / my-dir สคริปต์ล้มเหลวเนื่องจากไม่สามารถดำเนินการ rm -rf / usr / bin / my-dir ได้สำเร็จ (จะลบเนื้อหาทั้งหมด แต่ไม่ใช่ไดเรกทอรี)

มีวิธีแก้ไขปัญหานี้ไหม (เช่นวิธีการกำหนดค่าเชลล์เพื่ออนุญาตให้ลบไดเรกทอรีในขณะที่ฉันอยู่ในนั้น) หรือวิธีแก้ปัญหาอื่น ๆ ? ขณะนี้ฉัน cd ออกจากไดเรกทอรีให้รันสคริปต์แล้ว cd กลับเข้าไปในไดเรกทอรี แต่ฉันต้องทำอย่างนี้หลายร้อยครั้งต่อวัน - ต้องมีวิธีที่มีประสิทธิภาพมากกว่านี้


ใส่cd ~; ที่ด้านหน้าของสคริปต์อัพเดตหรือไม่ คุณสามารถใส่cd /usr/bin/my-dirท้ายได้ดังนั้นหลังจากที่คุณกระโดดกลับ คุณกำลังเรียกใช้คำสั่งเหล่านี้ทั้งหมดในสคริปต์ใช่ไหม? ถ้าไม่ลองพิจารณาดูสิว่าคุณทำอย่างนี้หลายร้อยครั้งต่อวัน
Frank Thomas

อีกวิธีหนึ่งคุณสามารถใช้rmdir /usr/bin/my-dirเพื่อลบ dir หลังจากที่คุณได้ rm -rf'ed rmdir จะทำงานในไดเรกทอรีปัจจุบันและไม่เปลี่ยนพรอมต์ดังนั้นการแจ้งจะชี้ไปยังตำแหน่งที่ไม่มีอยู่ชั่วคราวดังนั้นเมื่อคุณสร้าง dir ใหม่มันจะยังคงชี้ไปยังตำแหน่งที่ถูกต้อง
Frank Thomas

ขอบคุณ Frank - มันใช้งานไม่ได้ แต่มันทำให้ฉันคิดในทิศทางที่ถูกต้อง - เป็นไดเรกทอรีที่ถูกลบจริง ๆ
simmons

คำตอบ:


0

ในกรณีที่มันช่วยให้ทุกคน ปรากฎว่าวิธีการทำงานของเชลล์คือถ้าไดเรกทอรีปัจจุบันถูกลบในอินสแตนซ์อื่นของเชลล์และจากนั้นจะถูกสร้างขึ้นใหม่และเติมด้วยไฟล์เชลล์เดิมจะแสดงไดเรกทอรีว่างเปล่า

หากต้องการดูไฟล์อีกครั้งเพียงไป

cd .

สิ่งนี้นำไปสู่การแก้ปัญหาดั้งเดิมโดยไม่ลบไดเรกทอรีเอง (เพียงแค่ลบและแทนที่ไฟล์ที่ระบุ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.