ทำอะไรบางอย่างเมื่อไฟล์มีการเปลี่ยนแปลง


10

เมื่อฉันเขียนเอกสาร LaTeX ฉันพบว่าตัวเองกด F6 ในตัวแก้ไขของฉันเพื่อรวบรวมบ่อยครั้ง หรือเมื่อผมใช้ SASS ผมมักจะพิมพ์makeการแปลงของฉันเข้าไป.scss.css

ตอนนี้ฉันต้องการให้เครื่องทำงานสกปรกและทำงานmakeหรืออย่างอื่นทุกครั้งที่มีการเปลี่ยนแปลงไฟล์

จนถึงตอนนี้ฉันยังคงเปิดหน้าต่างเทอร์มินัลแล้วกดลูกศรขึ้นแล้วกลับมา หรือฉันใช้watch makeแต่ดูเหมือนว่าจะเป็นทางออกที่แปลก

มีวิธีที่ดีใน Linux ที่จะทำอะไรเมื่อไฟล์ที่กำหนดมีการเปลี่ยนแปลง?

คำตอบ:


4

คุณกำลังมองหาinotifywaitส่วนหนึ่งของinotify เครื่องมือ มีตัวอย่างบางส่วนของวิธีการใช้บนเว็บไซต์ของโครงการ แต่วิธีง่าย ๆ คือ

while true; do inotifywait code.cpp -e modify; make; done

ส่วนสำคัญของซึ่งคือ

inotifywait code.cpp -e modify

คำสั่งนั้นจะรอจนกว่าcode.cppจะถูกแก้ไขจากนั้นออก ใส่ในวงที่ไม่มีที่สิ้นสุดและตามด้วยmakeทำให้มันสร้างอย่างต่อเนื่องหลังจากการปรับเปลี่ยนทุกครั้ง

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


นั่นคือสิ่งที่ฉันกำลังมองหา!
Martin Ueding

1

ลองดูที่incronแพ็กเกจคล้าย cron ที่ตอบสนองต่อเหตุการณ์ของระบบไฟล์แทนที่จะเป็นเหตุการณ์ที่เกิดขึ้นในเวลา แพคเกจประกอบด้วย daemon ( incrond) และตัวจัดการตาราง ( incrontab) คล้ายกับcron ที่รู้จักกันดีcrond/ crontabคู่

ด้วย incron คุณสามารถจัดการให้ทำงานได้อย่างง่ายดายmakeทุกครั้งที่มีการแก้ไขไฟล์และ / หรือไดเรกทอรีเฉพาะ


ที่ดูเหมือน overkill เล็ก ๆ น้อย ๆ ในมือข้างหนึ่ง แต่ในทางกลับกันมันเป็นเพียงเครื่องมือที่เหมาะสม ฉันจะต้องตรวจสอบมันบางทีฉันสามารถเปิดใช้งานและปิดการใช้งานสำหรับการเขียนโปรแกรมแต่ละครั้ง
Martin Ueding

0

มากกว่าwatch makeจะเป็นwatch lsอย่างไร จากนั้นmakeเมื่อการเปลี่ยนแปลงการประทับเวลา


ตรวจสอบการประทับเวลาเรียบร้อยแล้วดังนั้นจึงไม่มีประโยชน์ที่จะตรวจสอบเวลาและให้ทำการตรวจสอบเวลาอีกครั้ง
มาร์ติน Ueding

ถูกต้อง แต่การวิ่งที่ใช้นั้นแพงกว่าการวิ่ง ls
Scott C Wilson

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