Làm một cái gì đó khi một tập tin được thay đổi


10

Khi tôi viết một tài liệu LaTeX, tôi thấy mình nhấn F6 trong trình chỉnh sửa của mình để biên dịch thường xuyên. Hoặc khi tôi sử dụng SASS, tôi thường gõ makeđể chuyển đổi .scssthành .css.

Bây giờ tôi muốn để máy thực hiện công việc bẩn thỉu và chạy makehoặc một cái gì đó khác mỗi khi một tập tin nhất định thay đổi.

Cho đến nay tôi vẫn mở một cửa sổ đầu cuối và nhấn mũi tên lên và quay lại. Hoặc tôi đã sử dụng watch make, nhưng đó có vẻ là một giải pháp kỳ lạ.

Có một cách hay trên Linux để làm một cái gì đó khi một tập tin nhất định thay đổi?

Câu trả lời:


4

Bạn đang tìm kiếm inotifywait, một phần của công cụ inotify . Có một số ví dụ về cách sử dụng nó trên trang web của dự án nhưng một cách tiếp cận đơn giản là,

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

phần quan trọng trong đó là,

inotifywait code.cpp -e modify

Lệnh đó sẽ đợi cho đến khi code.cppđược sửa đổi rồi thoát. Đặt trong vòng lặp vô hạn và theo sau với makenguyên nhân khiến nó liên tục được xây dựng lại sau mỗi lần sửa đổi.

Bên cạnh việc chờ đợi sửa đổi, bạn có thể chờ đợi khi tạo, xóa, truy cập, mở, đóng, và nhiều hơn nữa. Tôi đặc biệt khuyên bạn nên xem các ví dụ về dự áninotifywait man page để biết một số ý tưởng khác về cách sử dụng nó.


Đó chính xác là những gì tôi đang tìm kiếm!
Martin Uting

1

Hãy xem incron , một gói giống như cron đáp ứng các sự kiện hệ thống tập tin, thay vì các sự kiện thời gian. Gói này bao gồm một daemon ( incrond) và một trình thao tác bảng ( incrontab), tương tự như cặp cron nổi tiếng crond/ crontabcặp.

Với incron, bạn có thể dễ dàng sắp xếp để chạy makebất cứ khi nào các tệp và / hoặc thư mục cụ thể được sửa đổi.


Điều đó có vẻ hơi quá mức một mặt, nhưng mặt khác nó chỉ là công cụ phù hợp. Tôi sẽ phải kiểm tra nó, có lẽ tôi có thể kích hoạt và vô hiệu hóa nó cho mỗi phiên lập trình.
Martin Uting

0

Thay vì watch make, làm thế nào về watch ls? Sau đó chỉ makekhi dấu thời gian thay đổi.


Chà, hãy kiểm tra dấu thời gian, vì vậy việc kiểm tra thời gian và sau đó hãy kiểm tra lại thời gian một cách vô nghĩa.
Martin Uting

Phải nhưng chạy làm đắt hơn chạy ls.
Scott C Wilson

1
Và nếu makefile của tôi chỉ là hai dòng cho đĩa đơn đó .tex? Bạn có nghĩ rằng sẽ đáng để viết một lstrình phân tích cú pháp?
Martin Uting
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.