просмотр нескольких каталогов с помощью 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 ответ:
Если ваша логика одинакова, вы можете использовать функцию 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 &