
Cada vez que faço algumas alterações em um arquivo e salvo, gostaria que um comando fosse executado. Posso configurar um script Ruby que possa monitorar o arquivo e executar o comando como eu quiser, mas me ocorre que deveria haver alguma maneira simples do Unix de fazer isso. Existe? Estou no Ubuntu 8.10, para ser um pouco menos vago.
Editar:
incron
foi sugerido e parece bom. Mas estou tendo problemas para fazê-lo funcionar (editar: o comando parece não ser executado quando salvo um arquivo no diretório especificado ou meu comando está com defeito). Instalei o incron e configurei a tabela incron do meu usuário usando o incrontab e adicionei o usuário à lista de permitidos. Minha situação específica é editar um arquivo TeX. Quero que o comando para renderizá-lo como PDF seja executado sempre que eu editar e salvar o arquivo TeX. Então esta é a entrada da tabela incron que eu criei:
/home/ehsanul/Documents/latex IN_CLOSE_WRITE echo $@/$# | grep \\.tex$ | xargs xelatex
O que estou fazendo de errado?
Responder1
Você não diz qual Unix está usando, mas o Linux temnotificare háferramentas inotifyeíncron.
Existe umInterface Rubypara inotificar.
Responder2
Não diretamente, não (a menos que haja algum tipo de gancho em um sistema de arquivos com o qual não estou familiarizado).
Você edita o arquivo por meio de algum método padrão? Nesse caso, seria mais fácil automatizar o comando desse ângulo, em vez de no nível do sistema.
Se você nos contar mais sobre a situação, poderemos lhe dar respostas melhores.
Responder3
Se acontecer de você usar controle de versão (e se não usar, certamente deveria!), você pode configurar um gancho de commit. Basta escolher um programa de controle de versão que permita fazer isso, a maioria deles faz.
Responder4
Instalarferramentas inotify.
Para observar um único arquivo e executar um comando quando ele for alterado:
inotifywait -m --format %w FILENAME | while read file; do
COMMAND ${file}
done
onde
FILENAME
: nome do arquivo que você deseja assistirCOMMAND
: comando que você deseja executar na alteração do arquivo-m
: opção para ouvir indefinidamente
inotifywait
pode gerar mais informações do que apenas o nome do arquivo (via --format
), verifique man inotifywait
o que mais ele pode fazer (é uma leitura bastante curta). Além disso, oexemplosno wiki dê algumas dicas.
Alguém provavelmente deveria agrupar esses comandos em um script de conveniência que faça exatamente o que você pediu
convenience-script FILENAME COMMAND