Jak wykonać polecenie po zmianie pliku w systemie Linux?

Opublikowany: 2022-04-04

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ć cron , 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 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

 ┌──(rootkali)-[~] └─# curl -sS https://webinstall.dev/watchexec | bash Thanks for using webi to install 'watchexec@stable' 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źć w oficjalnym repozytorium GitHub.

wejście

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

entr ” oznacza uruchomienie testu powiadamiania 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 oficjalne 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 entr .

 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 szczegółów i przykładów dotyczących polecenia entr , możesz odwiedzić ich oficjalne 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.