Faça algo quando um arquivo é alterado

10

Quando eu escrevo um documento LaTeX, percebo que devo pressionar F6 no meu editor para compilar com frequência. Ou quando uso o SASS, geralmente eu digito make para converter meu .scss em .css .

Agora eu gostaria de deixar a máquina fazer o trabalho sujo e executar make ou qualquer outra coisa toda vez que um determinado arquivo for alterado.

Até agora eu mantive uma janela de terminal aberta e pressionei a seta para cima e retornei. Ou usei watch make , mas isso parece uma solução estranha.

Existe uma maneira legal no Linux de fazer algo quando um determinado arquivo é alterado?

    
por Martin Ueding 25.04.2012 / 20:50

3 respostas

4

Você está procurando inotifywait , parte de inotify-tools . Existem alguns exemplos de como usá-lo no site do projeto, mas uma abordagem simples é,

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

a parte principal da qual é,

inotifywait code.cpp -e modify

Esse comando aguardará até que code.cpp seja modificado e saia. Coloque no loop infinito e seguido com make faz com que ele seja reconstruído constantemente após cada modificação.

Além de aguardar modificações, você pode esperar pela criação, exclusão, acesso, abertura, fechamento e muito mais. Eu recomendo ver os exemplos de projetos e inotifywait página de manual para algumas outras idéias sobre como ele pode ser usado.

    
por 30.04.2012 / 23:28
1

Dê uma olhada no incron , um pacote do tipo cron que responde a eventos do sistema de arquivos, em vez de eventos de tempo. O pacote consiste em um daemon ( incrond ) e um manipulador de tabela ( incrontab ), análogo ao conhecido par crond / crontab do cron.

Com o incron, você pode facilmente organizar make sempre que arquivos e / ou diretórios específicos forem modificados.

    
por 26.04.2012 / 03:25
0

Em vez de watch make , que tal watch ls ? Em seguida, apenas make quando o registro de data e hora mudar.

    
por 26.04.2012 / 03:29