2017-09-28 7 views
1

나는 shrinkwrap.sh라는 이름으로 내 프로젝트 디렉토리에이 bash는 스크립트가 :bash 스크립트를 무한 루프에서 멈추는 방법은 무엇입니까?

update_package_json_changed_files() { 
    echo "> changed files" 

    git diff --cached --name-only | grep -x package.json 
} 

update_shrinkwrap_and_at_to_git_index() { 
    echo "> Updating npm-shrinkwrap.json and adding to current commit." 

    npm shrinkwrap 
    git add npm-shrinkwrap.json 
} 

if get_package_json_changed_files; then 
    update_shrinkwrap_and_at_to_git_index 
fi 

나는 다음과 같은 package.json에서이 스크립트를 실행하고 있습니다 :

"scripts": { 
    "shrinkwrap": "bin/shrinkwrap.sh" 
} 

나는 NPM 사전 설치 - 커밋을 시도하면 스크립트를 다음과 같이 실행합니다.

"pre-commit": ["shrinkwrap"] 

스크립트를 실행하면 스크립트가 실행됩니다. 계속 달리기 때문에 아무 것도 멈출 수 없습니다. 나는 command + C, control + Z를 시도했다. 아무 일도 없었다. 이전에이 문제를 겪은 사람이 있습니까? 왜 그런 일이 일어나는거야?

답변

1

파일 변경시 트리거되고 파일 변경시 트리거하는 하나 이상의 파일을 계속 변경하여 파일을 변경하는 등의 문제가 발생할 수 있습니다.

그 휴식하기위한 일반적인 방법은 플래그 파일 (터치/tmp를/IN_PROGRESS)을 생성하고, 해당 파일이 이 존재하지 경우에만 update_shrinkwrap_and_at_to_git_index()를 호출하는 것입니다.

  • update_shrinkwrap_and_at_to_git_index()touch /tmp/in_progress
  • if get_package_json_changed_files; 전에 if [ -e /tmp/in_progress ]; then rm /tmp/in_progress; exit 0; fi

을 추가 존재하는 경우
, 삭제 (그러나 아무것도하지 않는다)

그래서를 OP Max Doung의 댓글 :

npm shrinkwarp 앞에 sudo을 추가하고 루프를 중지했습니다. 루프를 다시 시작하면 다시 루프가 시작됩니다. 왜 그럴까? 후크를 제안

말했다 사용하지 않는 것이 사용자 로컬 설정

(sudo을 통해, 여기 root) 다른 계정으로 명령을 실행 (예를 들어 ~/.gitconfig 하나)에 의해 트리거되는 글로벌 사용자 계정 특정 설정.

+0

nw shrinkwarp 앞에 sudo를 추가하면 루프가 멈추었습니다. 꺼내면 루프가 다시 시작됩니다. 왜 그럴까? –

+0

@MaxDoung 귀하의 의견에 대한 답변을 편집했습니다. – VonC

+0

두 가지 더 궁금한 점이 있습니다. 어디에서 바꿀 수 있습니까 (/ tmp/in_progress 터치). 또한이 무한 루프가 왜 일어나고 있는지에 대해 설명 할 수 있습니까? 나는 이것에 대해 거의 경험이 없다. 고마워. –