Jak wykonać polecenie po zmianie pliku w systemie Linux?

Trafiłeś we właściwe miejsce, jeśli chcesz nauczyć się uruchamiać polecenia Linuksa po zmianie dowolnego pliku w katalogu roboczym i tworzeniu nowych plików.

W Linuksie możesz użyć crona, aby zaplanować uruchamianie poleceń w określonych godzinach.

Ale co, jeśli potrzebujesz poleceń, które mają być uruchamiane za każdym razem, gdy plik jest modyfikowany lub nowy plik jest dodawany do katalogu?

Jest to również łatwe do osiągnięcia i istnieje kilka narzędzi wiersza poleceń, które to umożliwiają.

Zacznijmy!

watchexec

watchexec to poręczne i samodzielne narzędzie, które monitoruje dany katalog roboczy i wykonuje polecenie, jeśli wykryje jakiekolwiek zmiany, takie jak aktualizacja pliku lub utworzenie nowego pliku.

Cechy

  • Nie wymaga złożonej linii poleceń zawierającej xargs (argumenty rozszerzone).
  • Sprawdza zmiany w bieżącym katalogu i wszystkich podkatalogach w czasie rzeczywistym.
  • Nie ma potrzeby uruchamiania języka i nie jest on połączony z żadnym konkretnym językiem ani ekosystemem.
  • .gitignore i .ignore są domyślnie używane do decydowania, dla których plików zignorować powiadomienia.
  • Grupy procesów służą do śledzenia programów rozwidlających.
  • Obsługiwane jest oglądanie plików z określonym rozszerzeniem.
  • Jest kompatybilny z OS X, Linux i Windows.
  • Filtrowanie i ignorowanie zdarzeń w oparciu o glob (Wzorce wyszukiwania plików do znajdowania częściowo identycznych nazw plików są możliwe.

Instalacja watchexec

Aby łatwo zainstalować narzędzie watchexec, wklej poniższy link do terminala lub monitu powłoki i naciśnij enter.

Linux i macOS

curl -sS https://webinstall.dev/watchexec | bash

Po udanej instalacji ścieżka zostanie wyświetlona na ekranie. W moim przypadku to narzędzie zostało zainstalowane w /root/.local/bin

┌──(root💀kali)-[~]
└─# curl -sS https://webinstall.dev/watchexec | bash

Thanks for using webi to install '[email protected]' on 'Linux/x86_64'.
Have a problem? Experience a bug? Please let us know:
        https://github.com/webinstall/webi-installers/issues

Lovin' it? Say thanks with a Star on GitHub:
        https://github.com/webinstall/webi-installers

Found /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Extracting /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Installing to /root/.local/opt/watchexec-vcli-v1.18.9/bin/watchexec
Installed 'watchexec vcli-v1.18.9' as /root/.local/bin/watchexec

A po instalacji przejdź do repozytorium .local/bin i sprawdź, czy plik tam jest, czy nie, używając tych poleceń.

cd .local/bin

ls

Następnym krokiem jest wyeksportowanie ścieżki, aby użyć narzędzia watchexec.

export PATH="/root/.local/bin:$PATH"

Aby uruchomić, po prostu wpisz watchexec w terminalu jako użytkownik root. Użyj tego polecenia, aby zobaczyć, które flagi i opcje mogą być używane z narzędziem watchexec.

watchexec --help

Przykładowe komendy przykładowe

  • Wywołaj ls -la, gdy jakikolwiek plik zmieni się w tym katalogu/podkatalogu. To polecenie pokazuje wszystkie pliki obecne w katalogu, gdy tylko wykryje jakąkolwiek modyfikację.
watchexec -- ls -la
  • Za każdym razem, gdy zmieni się dowolny z plików rozszerzeń Pythona, js, CSS lub HTML w bieżącym katalogu, uruchom polecenie. Tutaj możesz przekazać dowolne polecenie. Rozszerzenia plików powinny być oddzielone przecinkami.
 watchexec --exts py,js,css,html <command>
  • Uruchom polecenie, gdy zmieni się dowolny plik w lib lub src. Opcja „-w” obserwuje określony plik lub katalog w systemie.
watchexec -w lib -w src <command>
  • Wywołaj/uruchom ponownie dowolną usługę, gdy dowolny plik w bieżącym katalogu (i wszystkich podkatalogach) ulegnie zmianie.
watchexec -e html -r tor

watchexec -e js,py -r mysql

Tutaj opcja „-r” ponownie uruchamia proces lub usługę, jeśli jest uruchomiona w systemie.

Więcej przykładów użycia watchexec można znaleźć na stronie oficjalne repozytorium GitHub.

wejście

wejście to proste i doskonałe narzędzie wiersza poleceń do uruchamiania dowolnych poleceń, gdy w danym katalogu wystąpią jakiekolwiek modyfikacje.

„entr” oznacza uczestnika testu z powiadomieniem o zdarzeniu. To narzędzie zostało stworzone w celu szybkiego uzyskiwania informacji zwrotnych i automatycznego testowania.

Instalacja

entr jest preinstalowany w dystrybucji Linuksa. Jeśli go brakuje, musisz zainstalować go ręcznie.

To narzędzie jest proste w użyciu i można je zainstalować za pomocą następującego polecenia.

sudo apt-get install entr

Możesz też zainstalować go, klonując urzędnika Repozytorium Git.

git clone https://github.com/eradman/entr.git

Następnie przejdź do tego katalogu i zainstaluj wymagania, korzystając z poniższych poleceń.

./configure
make test
make install

Aby zobaczyć dostępne opcje kompilacji, uruchom ./configure -h

Przykładowe komendy przykładowe

Aby zobaczyć opcje i argumenty dostępne dla polecenia entr. Użyj następującego polecenia.

man entr

To polecenie wyświetla podręcznik użytkownika dla polecenia enter.

NAME
     entr — run arbitrary commands when files change

SYNOPSIS
     entr [-acdnprsz] utility [argument /_ ...]

DESCRIPTION
     A list of files provided on standard input, and the utility is executed using the supplied arguments
     if any of them change.  entr waits for the child process to finish before responding to subsequent
     file system events.  A TTY is also opened before entering the watch loop in order to support interac‐
     tive utilities.

     The arguments are as follows:

     -a      Respond to all events which occur while the utility is running.  Without this option, entr
             consolidates events in order to avoid looping.  This option has no effect in conjunction with
             the -r flag.

     -c      Clear the screen before invoking the utility specified on the command line.  Specify twice to
             erase the scroll back buffer.

     -d      Track the directories of regular files provided as input and exit if a new file is added.
             This option also enables directories to be specified explicitly.  If specified twice, all new
             entries to a directory are recognized, otherwise files with names beginning with ‘.’ are ig‐
             nored.

     -n      Run in non-interactive mode.  In this mode entr does not attempt to read from the TTY or
             change its properties.

     -p      Postpone the first execution of the utility until a file is modified.

 Manual page entr(1) line 1 (press h for help or q to quit)
  • Uruchamianie i automatyczne ponowne ładowanie serwera MySQL po zmianie dowolnego pliku JavaScript w katalogu roboczym. Za każdym razem, gdy zmiany są zapisywane do pliku, entr przeładowuje serwer MySQL.
 ls *.js | entr -r mysql
  • Aby automatycznie ponownie załadować serwer sieciowy lub zakończyć, jeśli serwer zostanie zamknięty.
$ ls * | entr -rz ./httpd

Aby uzyskać więcej informacji i przykładów dotyczących polecenia enter, możesz odwiedzić ich oficjalną Repozytorium GitHub.

Ostatnie słowa 👩‍💻

Mam nadzieję, że ten artykuł okazał się bardzo przydatny w nauce uruchamiania poleceń Linuksa w przypadku zmiany dowolnego pliku w danym katalogu i tworzenia nowych plików.

Możesz być również zainteresowany nauką usuwania plików i katalogów w systemie Linux.