Faça algo quando um arquivo for alterado


10

Quando escrevo um documento do LaTeX, encontro-me pressionando F6 no meu editor para compilar com freqüência. Ou, quando uso o SASS, geralmente digito makepara converter .scssem .css.

Agora, gostaria de deixar a máquina fazer o trabalho sujo e executá-la makeou qualquer outra coisa toda vez que um determinado arquivo for alterado.

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

Existe uma maneira agradável no Linux de fazer algo quando um determinado arquivo é alterado?

Respostas:


4

Você está procurando inotifywait, parte das ferramentas inotify . 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

cuja parte principal é,

inotifywait code.cpp -e modify

Esse comando irá esperar até que code.cppseja modificado e depois sair. Coloque o loop infinito e o faça com makeque ele seja reconstruído constantemente após cada modificação.

Além de esperar pela modificação, você pode esperar na criação, exclusão, acesso, abertura, fechamento e muito mais. Eu recomendo olhar os exemplos do projeto e a página de manual inotifywait para obter outras idéias sobre como ele pode ser usado.


É exatamente isso que estou procurando!
Martin Ueding

1

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

Com o incron, você pode organizar facilmente a execução makesempre que arquivos e / ou diretórios específicos forem modificados.


Isso parece um pouco exagerado, por um lado, mas, por outro, é a ferramenta certa. Vou ter que dar uma olhada, talvez eu possa habilitá-lo e desabilitá-lo para cada sessão de programação.
Martin Ueding

0

Em vez de watch make, que tal watch ls? Então, makequando o carimbo de data e hora mudar.


Bem, o make já verifica os registros de data e hora, portanto, é inútil verificar o horário e deixe o check novamente.
Martin Ueding

O make certo, mas em execução, é mais caro do que executar sl.
22612 Scott C Wilson

1
E se meu makefile tiver apenas duas linhas para esse single .tex? Você acha que valeria a pena escrever um lsanalisador?
Martin Ueding
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.