Linux cung cấp một giao diện đẹp để theo dõi tất cả các sự kiện hệ thống tệp như tạo, sửa đổi, xóa tệp. Giao diện là inotifyhọ của các cuộc gọi hệ thống, các tiện ích không gian người dùng tận dụng các cuộc gọi này được cung cấp bởi inotify-toolsgói trong Ubuntu (có sẵn trên kho vũ trụ). Nếu bạn chưa có nó, hãy cài đặt bằng cách:
sudo apt-get install inotify-tools
inotify-toolscung cấp inotifywaitvà inotifywatchnhị phân, chúng ta cần cái đầu tiên.
Vì vậy, bạn muốn chạy lệnh asciidoctor -q some_filekhi bất kỳ .adoctệp nào được sửa đổi ( some_filesẽ được thay thế bởi điều đó), nếu vậy giả sử các .adoctệp của bạn nằm trong thư mục /foo/bar, bạn có thể đặt đồng hồ:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-qcho phép chế độ im lặng, không có thông tin từ inotifywaitchính nó
-m cho phép chế độ màn hình, nếu không nó sẽ thoát sau sự kiện đầu tiên
--event modify, chúng tôi chỉ quan tâm đến modifysự kiện tức là khi một tệp được sửa đổi. Các giá trị khác có thể bao gồm open, closev.v.
--format %w, chúng tôi chỉ muốn tên tệp được sửa đổi thay vì bó thông tin khác vì chúng tôi sẽ sử dụng tên tệp làm đầu vào cho lệnh khác
/foo/bar/*.adocsẽ được mở rộng cho tất cả .adoccác tập tin trong /foo/barthư mục
Bây giờ ở trên sẽ hiển thị cho bạn tên tệp bất cứ khi nào được sửa đổi, bây giờ để chạy lệnh trên tên tệp (giả sử lệnh lấy đối số qua STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
Bạn cũng có thể thiết lập đồng hồ đệ quy trên thư mục, sau đó bạn sẽ chỉ cần sử dụng grepđể lọc các tệp mong muốn. Ở đây thiết lập đồng hồ đệ quy ( -r) trên thư mục /foo/barvà sử dụng grepđể chỉ lọc .adoccác tệp:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Khi xem các thư mục, bộ xác định định dạng đầu ra %wsẽ phân giải thành tên thư mục, vì vậy chúng ta cần %flấy tên tệp. Trong khi xem các tập tin, %fsẽ giải quyết chuỗi rỗng.
Lưu ý rằng, bạn cũng có thể chạy inotifywaittrong -dchế độ daemon ( ), bạn cũng có thể tạo kịch bản cho toàn bộ nội dung và / hoặc chạy ở chế độ nền và / hoặc chơi với nó nhiều tùy chọn khác.
Ngoài ra, bạn có thể thay thế asciidoctorbằng bất kỳ lệnh nào khác mà bạn chọn, nếu bạn muốn.
Kiểm tra man inotifywaitđể có thêm ý tưởng.