просмотр нескольких каталогов с помощью inotifywait и запуск сценариев


У меня есть несколько репозиториев git, содержащих веб-сайты. Я хочу запустить inotifywait против их клонированных локальных версий, чтобы отслеживать определенные события файлов и автоматически запускать сценарии git push и git pull при обнаружении этих событий.

До сих пор я создавал скрипт с отдельными функциями для каждого каталога, но вызывается только первая функция.

  #!/usr/bin/env bash

  dbg() {
  inotifywait -mr -e ATTRIB /path/to/dbg/ |
  while read dir ev file;
  do
  cd /path/to/dbg
  git pull;
  git add .;
  git commit -m " something regarding this website has changed. check .... for more        info";
  git push;
  ssh remote@server.com 'cd /path/to/web/root; git pull';
  done;
  }
  dbg;

  website2() {
  same thing as above
  }
  website2;

  website3() {
  same thing as above
  }
  website3;

  .......

  website10() {
  ........
  }
  website10;

Как я могу структурировать этот бит кода, чтобы быть более эффективным и более важным, полностью работоспособным, без необходимости создавать и управлять 10 отдельными скриптами. Я действительно хотел бы сохранить эту логику вместе в одном файле, я хочу, чтобы это был один модуль, чтобы идти к большему проекту.

Пожалуйста, критикуйте мои вопросы, мою грамматику, процесс мышления и т. д. Чтобы я мог совершенствоваться. спасибо.
1 2

1 ответ:

Если ваша логика одинакова, вы можете использовать функцию bash, чтобы избежать копирования. Кроме того, сообщение commit также может быть передано в качестве аргумента. попробуйте это

#!/usr/bin/env bash

dbg() {
dbg_dir=$1
webroot_dir=$2
inotifywait -mr -e ATTRIB $dbg_dir |
while read dir ev file;
do
cd /path/to/dbg
git pull;
git add .;
git commit -m " something regarding this website has changed. check .... for more        info";
git push;
ssh remote@server.com 'cd $webroot_dir; git pull';
done;
}
dbg /path/to/dbg /path/to/webroot1 &  # & will run the command in background
dbg /path/to/dbg2 /path/to/webroot2 &
dbg /path/to/dbg3 /path/to/webroot3 &