Scopri come eseguire i comandi Linux quando un file in un set di file monitorato cambia e quando vengono creati nuovi file. Ti mostriamo come utilizzare questo strumento flessibile.
Il comando invio
Puoi configurare i comandi correre in orari specifici en Linux, usando cron
. È facile, affidabile e flessibile. Ma, Cosa succede se è necessario eseguire comandi ogni volta che un file cambia o un nuovo file viene aggiunto a una directory?? Anche questo è fattibile, e c'è più di un modo per farlo. il entr
il comando è a piacevolmente semplice modo per ottenere quella funzionalità.
Alcuni sistemi, Come la Generatore di siti statici Hugo, ha una funzione che ricostruisce automaticamente il tuo portale web se un file cambia o un nuovo file viene aggiunto al sito. Quella piccola caratteristica fa una differenza significativa per il tuo flusso di lavoro.. Con Hugo, puoi avere la tua versione di sviluppo del portale web nel tuo browser mentre modifichi i file che compongono il tuo sito. Ogni volta che salvi le tue modifiche o crei un file, il portale web si ricostruisce in millisecondi e le modifiche vengono inviate al tuo browser. Il feedback istantaneo è fantastico.
il entr
Il comando offre quel tipo di funzionalità a qualsiasi set di file. Il comando che viene lanciato quando viene rilevata una modifica è arbitrario. Può essere un comando Linux standard, un alias, una funzione di shell o uno script.
Installazione ingresso
Installare entr
in Ubuntu, usa questo comando:
sudo apt-get install entr
Installare entr
in Fedora, scriba:
sudo dnf install entr
A Manjaro, il comando è:
sudo pacman -Syu enter
Un semplice esempio
Useremo il comando touch per creare un file di testo chiamato “ejemplo.txt” y decir entr
per monitorare quel file.
il entr
Il comando accetta i nomi dei file che dovrebbe monitorare tramite STDIN
e accettare il comando da eseguire come parametri della riga di comando.
Il modo più semplice per passare un nome file a entr
è da usare ls
per elencarlo e incanalarlo in entr
. Quando il file cambia, entr
lo preparo io wc
comando a conta le linee, parole e caratteri nel file.
il /_
Il parametro è un segnaposto per il nome del file a cui è stato passato entr
. Se un gruppo di file viene passato a entr
, come *.txt
, il /_
Il parametro verrà sostituito dall'ultimo file da modificare.
tocca esempio.txt
ls esempio.txt | ingresso wc / _
Ogni volta che le modifiche vengono salvate nel file, entr
lancia wc
. Fermare entr
, catturare q
, oh Ctrl+c
.
IMPARENTATO: Cosa sono gli standard, stdout e stderr in Linux?
Usi pratici
Ora che abbiamo visto entr
in azione e comprendere il principio, diamo un'occhiata ad alcuni scenari più utili.
Volere entr
monitorare i file nella directory corrente. Se uno qualsiasi dei file viene modificato, vogliamo entr
pranzare make
in modo che possiamo ricostruire il nostro progetto. Concateneremo un altro comando make test
, per eseguire alcuni test sulla nuova build. L'operatore AND &&
avvierà il secondo comando solo se il primo viene completato senza problemi.
il -s
L'opzione (guscio) assicura che l'interprete utilizzato sia quello definito nella variabile d'ambiente SHELL. Questo garantisce entr
riceve il codice di uscita del primo make
comando.
ls | entr -s 'make && fare la prova'
Usando il ls
comando per inviare l'elenco di tutti i nomi di file nella directory a entr
è un po' goffo. Potresti avere file nella directory che fanno parte del progetto ma non sono in realtà file di build. Forse sono note di progettazione o una lista di cose da fare. Non hai bisogno di ricostruire il tuo progetto ogni volta che cambi uno di quei file senza codice.
Possiamo perfezionare il comando in modo che controlli solo i file di codice sorgente appropriati. Questo comando monitora il codice sorgente C e i file di intestazione.
ls *.[ch] | entr -s 'make && fare la prova'
Certo, non ci limitiamo al lancio make
. Potresti avere uno script di build personalizzato che preferisci usare.
ls *.[ch] | inserisci script.sh
Sfruttare Git
il entr
il comando non è Git-ware, ma possiamo ancora usa alcune delle capacità di Git per rendere più fluido il nostro flusso di lavoro.
il git ls-file
Il comando elencherà i file che si trovano nell'indice Git e nell'albero dei sorgenti di lavoro, teniendo en cuenta las excepciones que se han definido en su archivo “.gitignore”. Questo è un elenco preparato dei file che ci interessano, quindi usiamolo come sorgente dei file da monitorare.
git ls-files | inserisci script.sh
il ls-files
Il comando accetta le opzioni della riga di comando. Questi possono essere usati per filtrare ulteriormente o aumentare l'elenco dei file restituiti da Git:
- -C: Mostra i file nella cache.
- -D: Mostra file cancellati.
- -Metro: Mostra file modificati.
- -oh: Mostra file non tracciati.
il --exclude-standard
L'opzione è un modo abbreviato per dire a Git di ignorare i file che corrispondono alle voci nei "file .git / Informazioni / escludere", locale ".gitignore" e globale ".gitignore".
git ls-files -cdmo --exclude-standard | inserisci 'make && fare la prova'
Ciò rileverà molte eventualità, ma non funzionerà con la creazione di un nuovo file. E il nuovo file non sarà in Git. Possiamo ancora far fronte a quella situazione, usando un po' di script bash e una funzione di entr
.
il -d
(directory) cause di opzione entr
per monitorare i file in una directory ed uscire se viene aggiunto un nuovo file. Avvolgendo il nostro entr
comando in a while/do
ciclo continuo, Tutto quanto entr
La riga di comando si riavvierà automaticamente, e il nuovo file verrà selezionato e agito su. Archivos y directorios cuyos nombres comienzan con un punto “.
"Sono ignorati".
mentre vero; fare
{ git ls-files; git ls-files . --standard di esclusione --altri; } | entr -d ./script.sh
done
Reinicio de servidores e intérpretes
Forse lavori con un lingua interpretata Come Rubino. Ogni volta che il file del programma viene modificato, dovresti fermare e riavviare l'interprete Ruby. Puoi gestire questi tipi di casi d'uso con il -r
(ricomincia) opzione.
Para monitorear un archivo de programa llamado “hello_world.rb”, e per fermare e riavviare l'interprete Ruby ogni volta che il file di programma cambia, usa questo comando:
ls ciao_mondo.rb | entr -r ruby ciao_mondo.rb
Ogni volta che il file del programma viene modificato e salvato, l'interprete Ruby si riavvia e il programma si ricarica.
Il programma inizialmente conteneva:
mette "Ciao, Mondo!"
È stato modificato per dire:
mette "Ciao, CloudSavvyIT!"
Quando questo è stato salvato, entr
riavviato l'interprete ruby e ricaricato il programma.
El archivo se editó una vez más para agregar la palabra “lectores” y se guardó en el disco duro.
mette "Ciao, Lettori CloudSavvyIT!"
Puoi vedere le tre uscite nello screenshot. Se premi il spacebar
, entr
riavvierà il comando indipendentemente dal fatto che tu abbia modificato o meno il file del programma.
Non solo per i programmatori
Perché il comando lanciato da entr
può essere qualsiasi cosa, inclusi gli script di shell, lo scopo da usare entr
l'automazione dei processi è praticamente illimitata.
Forse hai una directory che contiene file inseriti da FTP sicuro, oh rsync, oh Riccio. Puoi fare in modo che questi file vengano copiati automaticamente altrove, sono compressi o cercati grep para la palabra “errore”.
Questo lo rende un ottimo strumento sia per gli amministratori di sistema che per gli sviluppatori..