Linux fornisce una bella interfaccia per monitorare tutti gli eventi del file system come la creazione, la modifica, la rimozione di file. L'interfaccia è una inotifyfamiglia di chiamate di sistema, le utility di userspace che sfruttano queste chiamate sono fornite dal inotify-toolspacchetto in Ubuntu (disponibile sul repository dell'universo). Se non lo hai già, installa:
sudo apt-get install inotify-tools
inotify-toolsfornisce inotifywaite inotifywatchbinari, abbiamo bisogno del primo.
Quindi vuoi eseguire il comando asciidoctor -q some_filequando qualsiasi .adocfile viene modificato ( some_fileverrà sostituito da quello), se così assumendo che i tuoi .adocfile siano nella directory /foo/bar, puoi impostare l'orologio:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-qabilita la modalità silenziosa, nessuna informazione da inotifywaitsola
-m abilita la modalità monitor, altrimenti uscirà dopo il primo evento
--event modify, siamo interessati solo modifyall'evento, ad esempio quando un file viene modificato. Altri possibili valori includono open, closeecc.
--format %w, vogliamo solo il nome del file che viene modificato anziché un mucchio di altre informazioni poiché useremo il nome del file come input per un altro comando
/foo/bar/*.adocverrà espanso in tutti i .adocfile nella /foo/bardirectory
Ora quanto sopra ti mostrerà il nome del file ogni qualvolta viene modificato, ora per eseguire il comando sul nome del file (supponendo che il comando accetta argomenti tramite STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
È inoltre possibile impostare un orologio ricorsivo sulla directory, quindi sarà necessario utilizzare grepper filtrare solo i file desiderati. Qui impostando watch ricorsivamente ( -r) sulla directory /foo/bare usando grepper filtrare solo i .adocfile:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Quando si guardano le directory, l'identificatore del formato di output si %wrisolve nel nome della directory, quindi è necessario %fottenere il nome del file. Durante la visione di file, %frisolverebbe svuotare la stringa.
Nota che puoi anche eseguire inotifywaitin -dmodalità demone ( ), puoi anche scrivere tutto, e / o eseguire in background e / o giocare con altre opzioni.
Inoltre, se lo desideri, puoi sostituirlo asciidoctorcon qualsiasi altro comando di tua scelta.
Controlla man inotifywaitper avere più idee.