Chạy Script khi thay đổi tệp trên Mac OS X


8

Bất cứ ai cũng biết về một chương trình cho Mac OS mà bạn có thể chuyển tên cho một tệp thực thi và một tệp để xem, để sau đó nó chạy tệp thực thi mỗi khi tệp được xem thay đổi?

Tôi có một cái gì đó như thế này trong tâm trí:

$ fwatch /Users/foo/doc.tex /Users/foo/run-pdflatex.sh &
  fwatch running. Listening for changes in /Users/foo/doc.tex.
$ echo "This aint no LaTeX" > doc.tex
$ fwatch: Change in /Users/foo/doc.tex detected. Running /Users/foo/run-pdflatex.sh...

Câu trả lời:


6

Bạn có thể thiết lập điều này bằng cách sử dụng launchd . Cụ thể, bạn cần sử dụng khóa watchpaths trong bảng khởi chạy của mình để tìm kiếm các thay đổi trong tệp đó.

Thông tin đầy đủ có sẵn trong bài viết AFP548 này .

Mặc dù có vẻ như nó không còn được phát triển nữa, Lingon là một ứng dụng cung cấp cách thức GUI để thiết lập các tệp plist launchd này.

BIÊN TẬP:

Roughly, đây là những gì bạn làm bằng cách sử dụng các đường dẫn mẫu của bạn ở trên. Lưu một tệp có tên com.superuser.run-pdflatex.plistvới nội dung sau vào~/Library/LaunchAgents

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
    <string>com.superuser.run-pdflatex</string>
    <key>OnDemand</key>
    <true/>
    <key>Program</key>
    <string>/Users/foo/run-pdflatex.sh</string>
    <key>ProgramArguments</key>
    <array>
            <string>run-pdflatex.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
            <string>/Users/foo/doc.tex</string>
    </array>
    </dict>
</plist>

Sau đó, bạn nhập launchctl load ~/Library/LaunchAgents/com.superuser.run-pdflatex.plistvào thiết bị đầu cuối để tải trình nền xem tệp của bạn.

Trên đây là chưa được kiểm tra, nhưng đó là ý tưởng chung.


2

Bạn có thể làm điều đó trong Automator. Nó nằm trong Tùy chọn thư mục trong quy trình làm việc của máy tự động mà tôi tin (không phải trước máy Mac). Sau đó, bạn chỉ cần đính kèm tập lệnh vào thư mục và nó sẽ kích hoạt mỗi khi tập tin được thêm / thay đổi.


Tôi không thể làm theo. Tôi chưa quen với Automator, nhưng theo tôi biết bạn không thể chọn khi nào thực thi tập lệnh của mình mà chỉ phải làm gì khi nó được chạy. Có các hành động thư mục trong Mac OS mà tôi cũng có thể sử dụng nhưng tôi cho rằng AppleScript chỉ có hành động "thêm các mục thư mục vào" nhưng không có gì giống như "thay đổi các mục trong thư mục".
Julian

Bạn đúng @Johannes. Trong khi có các hành động thư mục để thêm các mục thư mục, xóa các mục thư mục, di chuyển cửa sổ thư mục, đóng cửa sổ thư mục và mở thư mục, không có Hành động thư mục để phát hiện các thay đổi đối với các tệp. Bạn có thể thấy điều này bằng cách mở từ điển StandardAdditions.osax trong Applescript Editor.
ghoppe
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.