Comment gérer l'accès public pour un compartiment AWS S3 – CloudSavvy IT
17 août 2020
13 meilleurs désherbants pour les allées + guide de l'acheteur et FAQ
17 août 2020

Effet domino.
Shutterstock / Studio Gecko

Apprenez à exécuter des commandes Linux lorsqu'un fichier d'un ensemble surveillé de fichiers change et lorsque de nouveaux fichiers sont créés. Nous vous montrons comment utiliser cet outil flexible.

La commande entr

Vous pouvez définir des commandes pour fonctionner à des moments précis sous Linux, en utilisant cron. C'est simple, fiable et flexible. Mais que faire si vous avez besoin d'exécuter des commandes chaque fois qu'un fichier change, ou si un nouveau fichier est ajouté à un répertoire? C’est également possible et il existe plusieurs façons de le faire. le entr la commande est une simple et rafraîchissant moyen d'atteindre cette fonctionnalité.

Certains systèmes, tels que le Générateur de site statique Hugo, ont une fonctionnalité qui reconstruit automatiquement votre site Web si un fichier change ou si un nouveau fichier est ajouté au site. Cette petite fonctionnalité fait une différence significative dans votre flux de travail. Avec Hugo, vous pouvez avoir votre version de développement du site Web dans votre navigateur lorsque vous modifiez les fichiers qui composent votre site. Chaque fois que vous enregistrez vos modifications ou créez un fichier, le site Web est reconstruit en millisecondes et les modifications sont transmises à votre navigateur. La rétroaction instantanée est fantastique.

le entr La commande apporte ce type de capacité à n'importe quel ensemble de fichiers. La commande qui est lancée lorsqu'un changement est détecté est arbitraire. Il peut s'agir d'une commande Linux standard, d'un alias, d'une fonction shell ou d'un script.

Installation d'entr

À installer entr sur Ubuntu, utilisez cette commande:

sudo apt-get install entr

sudo apt-get install entr dans une fenêtre de terminal

À installer entr sur Fedora, tapez:

sudo dnf install entr

sudo dnf install entr dans une fenêtre de terminal

Sur Manjaro, la commande est:

sudo pacman -Syu entr

sudo pacman -Syu entr dans une fenêtre de terminal

Un exemple simple

Nous utiliserons la commande tactile pour créer un fichier texte appelé "example.txt" et dites entr pour surveiller ce fichier.

le entr la commande accepte les noms de fichiers qu'elle doit surveiller via STDIN et accepte la commande qu'il doit exécuter en tant que paramètres de ligne de commande.

Le moyen le plus simple de transmettre un nom de fichier à entr est d'utiliser ls pour le lister, et le canaliser dans entr. Lorsque le fichier change, entr Va lancer toilettes commande à compter les lignes, les mots et les caractères dans le fichier.

le / _ paramètre est un espace réservé pour le nom de fichier du fichier qui a été passé à entr. Si un groupe de fichiers est transmis à entr, tel que *.SMS , les / _ le paramètre serait remplacé par le dernier fichier à être modifié.

touchez example.txt
ls example.txt | entr wc / _

ls example.txt | entr wc / _ dans une fenêtre de terminal

Chaque fois que les modifications sont enregistrées dans le fichier, entr lance toilettes . Arrêter entr, frappé q, ou Ctrl + c .

EN RELATION: Que sont stdin, stdout et stderr sous Linux?

Utilisations pratiques

Maintenant que nous avons vu entr en action et que vous comprenez le principe, examinons quelques scénarios plus utiles.

Nous allons faire entr surveiller les fichiers dans le répertoire courant. Si l'un des fichiers est modifié, nous voulons entr lancer faire pour nous de reconstruire notre projet. Nous enchaînerons une autre commande, faire un test, pour exécuter des tests sur la nouvelle version. L'opérateur AND && ne lancera la deuxième commande que si la première se termine sans aucun problème.

le -s (shell) permet de s'assurer que l'interpréteur utilisé est celui défini dans la variable d'environnement SHELL. Cela garantit entr reçoit le code de sortie du premier faire commander.

ls | entr -s 'make && make test'

En utilisant le ls commande pour envoyer la liste de tous les noms de fichiers du répertoire à entr est un peu maladroit. Vous pouvez avoir des fichiers dans le répertoire qui font partie du projet mais ne sont pas réellement des fichiers de construction. Ce sont peut-être des notes de conception ou une liste de choses à faire. Vous n'avez pas besoin de reconstruire votre projet chaque fois que vous modifiez l'un de ces fichiers non codés.

Nous pouvons affiner la commande afin qu'elle ne surveille que les fichiers de code source appropriés. Cette commande surveille le code source C et les fichiers d'en-tête.

ls *. (ch) | entr -s 'make && make test'

Bien sûr, nous ne sommes pas limités au lancement faire. Vous pouvez avoir un script de construction personnalisé que vous préférez utiliser.

ls *. (ch) | entr script.sh

Tirer parti de Git

le entr command n'est pas Git-ware, mais nous pouvons quand même utiliser certaines des fonctionnalités de Git pour fluidifier notre flux de travail.

le git fichier ls La commande listera les fichiers qui se trouvent dans l’index de Git et l’arborescence des sources de travail, en tenant compte des exceptions qui ont été définies dans votre fichier «.gitignore». C'est une liste prête à l'emploi des fichiers qui nous intéressent, alors utilisons-la comme source des fichiers à surveiller.

git ls-files | entr script.sh

le fichiers ls La commande accepte les options de ligne de commande. Ceux-ci peuvent être utilisés pour filtrer ou augmenter davantage la liste des fichiers renvoyée par Git:

  • -c: Afficher les fichiers mis en cache.
  • -ré: Afficher les fichiers supprimés.
  • -m: Afficher les fichiers modifiés.
  • -o: Afficher les fichiers non suivis.

le --exclude-standard L'option est un moyen abrégé de dire à Git d'ignorer les fichiers qui correspondent aux entrées des fichiers «.git / info / exclude», locaux «.gitignore» et globaux «.gitignore».

git ls-files -cdmo --exclude-standard | entr 'make && make test'

Cela attrapera de nombreuses éventualités, mais cela ne résoudra pas la création d’un nouveau fichier. Et le nouveau fichier ne sera pas dans Git. Nous pouvons encore faire face à cette situation, en utilisant un peu de script Bash et une fonctionnalité de entr.

le -ré (répertoire) cause entr pour surveiller les fichiers dans un répertoire et pour quitter si un nouveau fichier est ajouté. En enveloppant notre entr commande dans un tout faire boucle, le tout entr La ligne de commande sera automatiquement redémarrée et le nouveau fichier sera récupéré et traité. Fichiers et répertoires dont les noms commencent par un point ".”Sont ignorés.

tandis que vrai; faire

  {git ls-files; git fichiers ls. --exclude-standard --other; } | entr -d ./script.sh

terminé

Redémarrage des serveurs et des interprètes

Peut-être travaillez-vous avec un langage interprété comme Rubis. Chaque fois que votre fichier programme est modifié, vous devez arrêter et redémarrer l'interpréteur Ruby. Vous pouvez gérer ces types de cas d'utilisation avec le -r (redémarrer) option.

Pour surveiller un fichier programme appelé «hello_world.rb», et pour arrêter et redémarrer l'interpréteur Ruby chaque fois que le fichier programme change, utilisez cette commande:

ls hello_world.rb | entr -r ruby ​​hello_world.rb

Chaque fois que le fichier programme est édité et enregistré, l'interpréteur Ruby est redémarré et le programme rechargé.

ls hello_world.rb | entr -r ruby ​​hello_world.rb dans une fenêtre de terminal

Le programme contenait initialement:

met "Hello, World!"

Il a été modifié pour dire:

met "Bonjour, CloudSavvyIT!"

Quand cela a été sauvé, entr redémarré l'interpréteur Ruby et rechargé le programme.

Le fichier a été modifié une fois de plus pour ajouter le mot «lecteurs» et enregistré sur le disque dur.

met "Bonjour, lecteurs CloudSavvyIT!"

Vous pouvez voir les trois sorties dans la capture d'écran. Si vous appuyez sur barre d'espace, entr redémarrera la commande, que vous ayez ou non modifié le fichier programme.

Pas seulement pour les programmeurs

Parce que la commande lancée par entr peut être n'importe quoi, y compris des scripts shell, la portée d'utilisation entr pour automatiser les processus est pratiquement illimité.

Peut-être avez-vous un répertoire dans lequel des fichiers ont été déposés par FTP sécurisé, ou rsync, ou boucle. Vous pourriez avoir ces fichiers automatiquement copiés ailleurs, ou compressés, ou recherchés par grep pour le mot «erreur».

Cela en fait un excellent outil pour les administrateurs système et les développeurs.

//]]>