ฉันจะรีเฟรชไดเรกทอรีใน BASH ได้อย่างไร


24

ฉันมีไดเรกทอรีที่มีไฟล์ที่สร้างขึ้นโดยคอมไพเลอร์ ในระหว่างการสร้างแต่ละไดเรกทอรีนี้ได้รับการทำความสะอาดและหลังจากกระบวนการสร้างlsให้ฉันว่างเปล่า หลังจากฉันcdออกจากไดเรกทอรีแล้วกลับมามันทำงานได้ถูกต้อง คำถามคือ:

  1. มีวิธีอื่นที่หรูหรากว่าในการรีเฟรชไดเรกทอรีหรือไม่
  2. จะเกิดอะไรขึ้นเมื่อไฟล์ถูกลบและสร้างใหม่ ทำไมฉันต้องcdเห็นเนื้อหาไดเรกทอรีจริง?

คำตอบ:


10

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

โดยcd ..และcd (directory)คุณเลื่อนขึ้นและกลับไปยังไดเรกทอรี (สร้างขึ้นใหม่) และไฟล์จะมีตามที่คุณคาดหวัง

ทางเลือกที่ดีที่สุดคือแทนที่จะcdเข้าและออกจากไดเรกทอรีคือการเพิ่มชื่อไดเรกทอรีลงในlsคำสั่งของคุณและเรียกใช้จากไดเรกทอรีหลัก ดังนั้นแทนเพียงls YourSubdirectoryls


44

มีวิธีที่สั้นกว่า: cd .


2
น่าสนใจ เช่นเดียวกับนกฮัมมิงเบิร์ดสิ่งนี้มีเหตุผลไม่ควรทำงาน - แต่ดูเหมือนว่ามันเป็นเช่นนั้น ฉันคิดว่าคุณรู้ว่ามันใช้งานได้เพราะคุณได้ลองแล้ว คุณมีเอกสารอะไรบ้างไหม? เช่นถ้าฉันอยู่ในทีมพัฒนา POSIX / bash ฉันจะถูกล่อลวงให้พิจารณาข้อผิดพลาดนี้ คุณรู้เอกสารที่บอกว่าควรจะใช้วิธีนี้หรือไม่?
G-Man

2
เช่นเดียวกับเหยี่ยวนกเขาตัวนี้ลอยขึ้นเหนือดอกไม้อย่างงดงาม แต่มันก็กลืนกินนกฮัมมิงเบิร์ด
Matt Faus

ใช่ สมบูรณ์แบบมาก
chrismarx

1
นี่คือคำตอบที่ดีกว่า
deddebme

อา ฉันรู้แล้ว! จะต้องมีวิธี ขอบคุณ!
andersoyvind

10

ดูเหมือนแปลก แต่สั้นและรีเฟรชไดเรกทอรี:

cd `pwd`

โปรดทราบว่าสิ่งเหล่านี้เป็นเครื่องหมายขีดหลังไม่ใช่เครื่องหมายคำพูดเดี่ยวรอบ pwd


2

สิ่งที่ @Kent พูดหรือ: อย่าลบไดเรกทอรี แต่มีเพียงเนื้อหาด้วยวิธีนี้คุณสามารถอยู่ในไดเรกทอรี (โดยไม่มี " cd .. && cd -") และ "ls" ทำสิ่งที่คุณคาดหวังให้ทำ



2

สร้างนามแฝง refresh = "cd .. && cd -" ที่จะไปยังไดเรกทอรีและจากนั้น cd อีกครั้งในไดเรกทอรีก่อนหน้า

หากคุณแน่ใจว่าคุณจะต้องมีรายชื่ออีกครั้งคุณสามารถมี

alias refresh="cd .. && cd - && ls -lrt"

เมื่อ ailas สร้างเก็บ alias ไว้ในไฟล์ ~ / .bashrc ของคุณโดยทำ

alias | grep refresh >> ~/.bashrc

เพื่อให้สามารถใช้ได้ในครั้งต่อไปที่คุณเข้าสู่ระบบ


ใน Unix refreshอยู่นอกกรอบ
kenorb

คุณหมายถึงอะไรโดย "ออกจากกล่อง"? เมื่อฉันเห็นมันฉันตีความว่ามันหมายถึง "มาตรฐาน"; ตอนนี้ฉันสงสัยว่าคุณหมายถึงอะไร กำหนด "UNIX" Cygwin ไม่มีมาตรฐานคำสั่ง "รีเฟรช" (ตกลง Cygwin ขาดสิ่งต่างๆมากมายที่เป็นมาตรฐานใน POSIX / * nix / อะไรก็ตาม) และระบบ Linux ของฉันก็ไม่ได้เช่นกัน
G-Man
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.