Invólucro de nível superior para entr ou inotifywait

3

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.

Caso de uso

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.

Soluções existentes

Outros perguntaram: Um script bash pode ser vinculado a um arquivo? 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.

    
por krlmlr 07.03.2015 / 16:49

0 respostas