Executar script na alteração de arquivo no Mac OS X

8

Alguém sabe sobre um programa para Mac OS que você pode passar o nome para um executável e um arquivo para assistir, para que ele execute o executável toda vez que o arquivo sendo assistido for alterado?

Eu tenho algo assim em mente:

$ 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...
Johannes
fonte

Respostas:

6

Você pode configurar isso usando o launchd . Especificamente, você precisa usar a tecla watchpaths no seu launchd plist para procurar alterações nesse arquivo.

Informações exaustivas disponíveis neste artigo AFP548 .

Embora pareça não estar mais em desenvolvimento, o Lingon é um aplicativo que fornece uma maneira da GUI de configurar esses arquivos do launchd plist.

EDITAR:

Aproximadamente, aqui está o que você faria usando seus caminhos de amostra acima. Salve um arquivo nomeado com.superuser.run-pdflatex.plistcom o seguinte conteúdo em~/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>

Em seguida, digite launchctl load ~/Library/LaunchAgents/com.superuser.run-pdflatex.plisto terminal para carregar seu daemon de observação de arquivos.

Acima não foi testado, mas essa é a ideia geral.

ghoppe
fonte
2

Você pode fazer isso no Automator. Está em Opção de Pasta no fluxo de trabalho do automatizador, acredito (não na frente de um Mac). Em seguida, basta anexar o script à pasta e ele será acionado toda vez que um arquivo for adicionado / alterado.

MDMarra
fonte
Eu não consigo entender direito. Sou novo no Automator, mas, tanto quanto sei, você não pode escolher quando executar seu script, mas apenas o que fazer quando for executado. Há as ações de pasta no Mac OS que eu também poderia usar, mas achei que o AppleScript só tem a ação "adicionar itens de pasta a", mas nada como "alterar itens de pasta".
Johannes
Você está correto @Johannes. Embora existam ações de pasta para adicionar itens de pasta, remover itens de pasta, mover a janela da pasta, fechar a janela da pasta e abrir a pasta, não há Ação de Pasta para detectar alterações nos arquivos. Você pode ver isso abrindo o dicionário StandardAdditions.osax no Applescript Editor.
ghoppe