it-swarm-pt.tech

Um script bash pode ser conectado a um arquivo?

Quero que um script durma, a menos que um determinado arquivo seja modificado/excluído (ou um arquivo criado em um determinado diretório, ou ...). Isso pode ser alcançado de uma forma elegante? A coisa mais simples que me vem à mente é um loop que dorme por algum tempo antes de verificar o status novamente, mas talvez haja uma maneira mais elegante?

32
Tobias Kienzler

No linux, você pode usar o recurso inotify do kernel. As ferramentas de script podem ser encontradas lá: inotify-tools .

Exemplo de uso do wiki:

#!/bin/sh

EVENT=$(inotifywait --format '%e' ~/file1) # blocking without looping
[ $? != 0 ] && exit
[ "$EVENT" = "MODIFY" ] && echo 'file modified!'
[ "$EVENT" = "DELETE_SELF" ] && echo 'file deleted!'
# etc...
34
shellholic

Existe uma API chamada inotify para programadores C.

Existem algumas ferramentas que o utilizam, por ex. incron e ferramentas do inotify .

4
Mikel

De fato, há: entr (1) executará comandos arbitrários quando os arquivos forem alterados e também fornece uma opção de recarregamento automático para reiniciar servidores de aplicativos.

editar: alguns exemplos

Reconstruir se os arquivos de origem mudarem

$ find *.c | entr make

Inicie e recarregue automaticamente o servidor de teste se os arquivos mudarem

$ ls *.py | entr -r python main.py

Fornecendo um documento +/path/to/fifo permite um script mais complexo instruindo entr a escrever o nome de cada arquivo que muda para um canal nomeado. O seguinte irá converter arquivos Markdown no diretório atual para HTML à medida que são editados

$ ls *.md | entr +/tmp/notify &
$ while read F
> do
>   markdown2html $F
> done < /tmp/notify
3
eradman