Entr

Présentation de l’outil

Aujourd’hui, je vais vous parler du projet entr. J’ai découvert ce projet totalement par hasard, mais ça faisait quelques temps que je cherchais un outil équivalent.

L’objectif de cet outil, est de fournir une commande simple qui lance une autre commande lorsque des fichiers sont modifiés. En pratique, cet outil est assez utile si vous cherchez une alternative au livereload indépendante du langage utilisé et sans avoir besoin de lancer un IDE.

Exemples d’utilisation

Je l’utilise souvent pour les tests de projets en Golang, par exemple.

Imaginons que j’ai cette fonction du fichier pkg.go à tester :

// Inc returns the op1 integer incremented by one unit
func Inc(op1 int) int {
	return op1 + 1
}

Que je la teste avec le test pkg_test.go suivant :

func Test_Inc(t *testing.T) {
	actual := Inc(1)
	if actual != 2 {
		t.Errorf("Expecting: <2>, got <%d>", actual)
	}
}

Je vais pouvoir lancer mes tests en continue avec la commande :

find *.go | entr -c -s "go test ."

Voici un aperçu du résultat en live :

Dans un premier temps, on voit que le test ne fonctionne pas, mais dès que le fichier go est mis à jour, le test est relancé. La particularité ici, est d’utiliser le flag -c afin d’effacer l’écran avant de relancer la nouvelle commande.

Vous pouvez trouver la liste complète des options ici

Comment ça fonctionne ?

Afin d’éviter le polling, entr utilise les événements du système de fichier (kqueue pour BSD, inotify pour Linux).

Comment on l’installe ?

Pour l’installer, rien de plus simple, les paquets sont certainements disponibles pour votre distribution Linux :

Ubuntu, Debian, Mint, … :

$ apt install entr

Centos, … :

$ yum install entr

MacOS :

$ brew install entr