Estou procurando uma maneira de executar novamente um comando específico assim que qualquer um dos arquivos em um subdiretório (talvez menos selecionado exclua) for alterado.
Estou trabalhando em um projeto que é autônomo em um diretório. Este projeto pode ser compilado, digamos, usando make
. Eu quero usar o tempo ocioso da minha máquina para compilar repetidamente o projeto. Uma opção é chamar make
uma vez por segundo, por exemplo, usando watch (1)
. No entanto, se make
falhar, ele geralmente falhará sempre que for executado novamente, desperdiçando assim o poder de processamento da CPU (e, mais importante, aquecendo meu computador laptop).
Em vez disso, deve haver um processo que observe todos os arquivos e execute make
(ou qualquer outra ferramenta) somente após qualquer alteração no diretório onde o projeto reside.
Outros perguntaram: Um script bash pode ser vinculado a um arquivo? Há inotifywait (1)
, mas não parece ter uma boa interface para repetir um comando. Além disso, há entr (1)
que parece ser o caminho a percorrer, mas uma inspeção mais detalhada do site do projeto revela que
[i]t was determined early on that
entr
would not implement it's own file search syntax, relying on standard Unix tools instead.
Eu sou preguiçoso. Eu não quero escrever um loop para minha invocação repetida de make
. Existe uma ferramenta mágica de nível mais alto que me permite escrever
magic make
com o efeito de que make
é reexecutado toda vez que alguma coisa no diretório atual muda?
NB : seria ideal se essa ferramenta mágica estivesse ciente da inevitável condição de corrida resultante do uso de inotify
: Alterações que ocorrem após a emissão da chamada, mas antes que um relógio seja estabelecido. Não tenho certeza se entr
pode fazer isso, parece que esse recurso exige manter um registro de algum tipo de instantâneo de pelo menos o registro de data e hora de todos os arquivos afetados.
PROMOÇÃO SEM PROMOÇÃO : Meu próprio recurso de quatro linhas que (de certa forma) realiza isso é chamado rpt
e está longe de ser perfeito, gostaria de saber se estou duplicando o esforço aqui.