2012-12-04 5 views
1

웹 사이트가있는 여러 git 저장소가 있습니다. 특정 파일 이벤트를 모니터하고 git push 및 git pull 스크립트를 자동으로 실행하기 위해 복제 된 로컬 버전에 대해 inotifywait를 실행하고 싶습니다.inotifywait를 사용하여 여러 디렉토리를 감시하고 스크립트를 실행하십시오.

지금까지 각 디렉토리에 대해 별도의 함수로 스크립트를 만들었지 만 첫 번째 함수 만 호출됩니다. 내가 createa 10 별도의 스크립트를 관리 할 필요없이 완벽하게 작동, 더 효율적이고 더 중요한 코드의이 비트를 구성 할 수 있습니까

#!/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 [email protected] 'cd /path/to/web/root; git pull'; 
    done; 
    } 
    dbg; 

    website2() { 
    same thing as above 
    } 
    website2; 

    website3() { 
    same thing as above 
    } 
    website3; 

    ....... 

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

. 정말이 논리를 하나의 파일에 보관하고 싶습니다.이 모듈을 하나의 모듈로 사용하여 더 큰 프로젝트를 진행하고 싶습니다.

개선 할 수 있도록 제 질문, 문법, 사고 과정 등을 비평 해주십시오. 감사합니다.

답변

1

논리가 동일하면 복사를 피하기 위해 bash 기능을 사용할 수 있습니다. 게다가 커밋 메시지를 인수로 전달할 수도 있습니다. 시도해보기

#!/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 [email protected] '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 &