So führen Sie einen Linux-Befehl aus, wenn sich eine Reihe von Dateien ändert - CloudSavvy IT
Webagentur » Digitale Nachrichten » So führen Sie einen Linux-Befehl aus, wenn sich eine Reihe von Dateien ändert -

So führen Sie einen Linux-Befehl aus, wenn sich eine Reihe von Dateien ändert -

Gecko Studio / Shutterstock.com

Erfahren Sie, wie Sie Linux-Befehle ausführen, wenn sich eine Datei in einer überwachten Dateigruppe ändert und wenn neue Dateien erstellt werden. Wir zeigen Ihnen, wie Sie dieses flexible Tool nutzen.

Der eingegebene Befehl

Sie können unter Linux Befehle definieren, die zu bestimmten Zeiten ausgeführt werden sollen, indem Sie cron. Es ist einfach, zuverlässig und flexibel. Aber was ist, wenn Sie jedes Mal, wenn sich eine Datei ändert oder eine neue Datei zu einem Verzeichnis hinzugefügt wird, Befehle ausführen müssen? Es ist auch möglich, und es gibt mehr als eine Möglichkeit, dies zu tun. das entr ist eine einfache und erfrischende Möglichkeit, diese Funktionalität zu erhalten.

Einige Systeme, wie der Hugo Static Site Generator, verfügen über eine Funktion, die Ihre Website automatisch neu erstellt, wenn sich eine Datei ändert oder wenn der Site eine neue Datei hinzugefügt wird. Diese kleine Funktion macht einen erheblichen Unterschied in Ihrem Workflow. Mit Hugo können Sie Ihre Entwicklungsversion der Website in Ihrem Browser haben, wenn Sie die Dateien bearbeiten, aus denen Ihre Website besteht. Jedes Mal, wenn Sie Ihre Änderungen speichern oder eine Datei erstellen, wird die Website in Millisekunden neu erstellt und die Änderungen an Ihren Browser gesendet. Sofortiges Feedback ist fantastisch.

le entr Der Befehl bringt diese Art von Fähigkeit zu jedem Satz von Dateien. Der Befehl, der ausgegeben wird, wenn eine Änderung erkannt wird, ist willkürlich. Dies kann ein Standard-Linux-Befehl, ein Alias, eine Shell-Funktion oder ein Skript sein.

Eingangsinstallation

Installieren entr Verwenden Sie unter Ubuntu diesen Befehl:

sudo apt-get install entre

Installieren entr Geben Sie auf Fedora Folgendes ein:

sudo dnf install ent

Auf Manjaro lautet der Befehl:

sudo pacman -Syu enter

Ein einfaches Beispiel

Wir verwenden den Touch-Befehl, um eine Textdatei namens "example.txt" zu erstellen und sagen: entr um diese Datei zu überwachen.

le entr Der Befehl akzeptiert Dateinamen, die er überwachen soll über STDIN und akzeptiert den Befehl, der als Befehlszeilenparameter ausgeführt werden soll.

Der einfachste Weg, einen Dateinamen an . zu übergeben entr ist zu verwenden ls um es aufzulisten und einzufügen entr. Wenn sich die Datei ändert, entr Werde werfen wc Befehl zum Zählen von Zeilen, Wörtern und Zeichen in der Datei.

le /_ Der Parameter ist ein Platzhalter für den Dateinamen der Datei, die an . übergeben wurde entr. Wenn eine Gruppe von Dateien übertragen wird an entr, Tel que *.txt gruppieren die /_ Parameter würde durch die zuletzt geänderte Datei ersetzt.

Berühren Sie example.txt
ls example.txt | Eingang WC / _

Immer wenn die Änderungen in der Datei gespeichert werden, entr Lanze wc . Stoppen entr, Schlag qoder so Ctrl+c .

Praktische Anwendungen

Jetzt haben wir gesehen entr in Aktion und Sie haben das Prinzip verstanden, schauen wir uns einige weitere nützliche Szenarien an.

wir machen entr Überwachen Sie die Dateien im aktuellen Verzeichnis. Wenn eine der Dateien geändert wird, möchten wir entr Lanzenreiter make damit wir unser Projekt wieder aufbauen können. Wir werden eine weitere Bestellung verketten, make test, um Tests mit der neuen Version durchzuführen. Der UND-Operator && führt den zweiten Befehl nur aus, wenn der erste ohne Probleme ausgeführt wird.

le -s (shell) stellt sicher, dass der verwendete Interpreter der in der Umgebungsvariable SHELL definierte ist. Das garantiert entr erhält den Exit-Code vom ersten make Kommandant.

ls | input -s 'mache && mache test'

Mit der ls Befehl zum Senden der Liste aller Dateinamen im Verzeichnis an entr ist etwas umständlich. Möglicherweise befinden sich in dem Verzeichnis Dateien, die Teil des Projekts sind, aber keine Build-Dateien sind. Vielleicht sind es Designnotizen oder eine To-Do-Liste. Sie müssen Ihr Projekt nicht jedes Mal neu erstellen, wenn Sie eine dieser uncodierten Dateien bearbeiten.

Wir können den Befehl so einstellen, dass er nur die richtigen Quellcodedateien überwacht. Dieser Befehl überwacht C-Quellcode und Header-Dateien.

ls *. [ch] | input -s 'mache && mache test'

Natürlich beschränken wir uns nicht auf den Launch make. Möglicherweise haben Sie ein benutzerdefiniertes Build-Skript, das Sie verwenden möchten.

ls *. [ch] | entr script.sh

Git . nutzen

le entr ist keine Git-Ware, aber wir können dennoch einige der Fähigkeiten von Git nutzen, um unseren Workflow reibungsloser zu gestalten.

le git ls-file Der Befehl listet die Dateien auf, die sich im Git-Index und im funktionierenden Quellbaum befinden, wobei die Ausnahmen berücksichtigt werden, die in Ihrer Datei ".gitignore" definiert wurden. Dies ist eine vorgefertigte Liste der Dateien, an denen wir interessiert sind. Verwenden wir sie also als Quelle für die zu beobachtenden Dateien.

git ls-Dateien | entr script.sh

le ls-files Der Befehl akzeptiert Befehlszeilenoptionen. Diese können verwendet werden, um die Liste der von Git zurückgegebenen Dateien weiter zu filtern oder zu erweitern:

  • -c: Zwischengespeicherte Dateien anzeigen.
  • -D: Gelöschte Dateien anzeigen.
  • -m: Geänderte Dateien anzeigen.
  • -o: Nicht verfolgte Dateien anzeigen.

le --exclude-standard Die Option ist eine Verknüpfung, um Git anzuweisen, Dateien zu ignorieren, die mit Einträgen in den Dateien ".git / info / exclude", lokalen ".gitignore" und globalen ".gitignore"-Dateien übereinstimmen.

git ls-files -cdmo --exclude-standard | Geben Sie 'Make && Test machen' ein.

Dies wird viele Eventualitäten abfangen, aber es wird nicht mit dem Erstellen einer neuen Datei fertig. Und die neue Datei wird nicht in Git sein. Wir können mit dieser Situation immer noch umgehen, indem wir einige Bash-Skripte und einige Funktionen von verwenden entr.

le -d (Verzeichnis-)Option Ursachen entr um Dateien in einem Verzeichnis zu überwachen und zu beenden, wenn eine neue Datei hinzugefügt wird. Durch das Verpacken unserer entr bestellen in a while/do Schleife, Set entr Die Kommandozeile wird automatisch neu gestartet und die neue Datei wird geholt und verarbeitet. Dateien und Verzeichnisse, deren Namen mit einem Punkt beginnen " . Werden ignoriert.

während wahr; do {git ls-Dateien; git ls-Dateien. --exclude-standard --others; } | ent -d ./script.sh fertig

Server und Interpreter neu starten

Vielleicht arbeiten Sie mit interpretierter Sprache wie Ruby. Jedes Mal, wenn Ihre Programmdatei geändert wird, müssen Sie den Ruby-Interpreter stoppen und neu starten. Sie können diese Art von Anwendungsfällen mit dem -r (Neustart) Option.

Um eine Programmdatei namens "hello_world.rb" zu überwachen und den Ruby-Interpreter zu stoppen und neu zu starten, wenn sich die Programmdatei ändert, verwenden Sie diesen Befehl:

ls hello_world.rb | Geben Sie -r Rubin ein hello_world.rb

Jedes Mal, wenn die Programmdatei bearbeitet und gespeichert wird, wird der Ruby-Interpreter neu gestartet und das Programm neu geladen.

Das Programm enthielt zunächst:

setzt "Hallo, Welt!"

Es wurde bearbeitet, um zu sagen:

setzt "Hallo, CloudSavvyIT!"

Wenn dies aufgezeichnet wurde, entr startete den Ruby-Interpreter neu und lud das Programm neu.

Die Datei wurde noch einmal bearbeitet, um das Wort "Laufwerke" hinzuzufügen und auf der Festplatte gespeichert.

setzt "Hallo, CloudSavvyIT-Leser!"

Sie können die drei Ausgänge im Screenshot sehen. Wenn du die drückst spacebar, entr startet den Befehl neu, unabhängig davon, ob Sie die Programmdatei geändert haben oder nicht.

Nicht nur für Programmierer

Weil der Befehl gestartet von entr kann alles sein, einschließlich Shell-Skripte, die Fähigkeit zu verwenden entr der Automatisierung von Prozessen sind nahezu keine Grenzen gesetzt.

Vielleicht haben Sie ein Verzeichnis, in das Dateien mit Secure FTP, rsync oder curl hochgeladen wurden. Sie können diese Dateien automatisch an eine andere Stelle kopieren lassen, sie komprimieren oder nach dem Wort "Fehler" grep suchen.

Dies macht es zu einem großartigen Werkzeug für Systemadministratoren und Entwickler.

★ ★ ★ ★ ★