몇 개의 디렉토리를 재 동기화하고 있습니다. bash 터미널이 열려 있고 다음과 같이 실행 중입니다.
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
그러나 모든 것을 멈추려면 Control-C를 누릅니다. 그러면 rsync가 중지되지만 다음 단계로 계속 진행됩니다. 이 경우, 나는 무슨 일이 있었는지 깨닫고 일이 다시 작동 할 때까지 미친 사람처럼 Control-C를 누르십시오.
이것을 ‘수정’할 방법이 있습니까? 그런 루프가 있고 Control-C를 누르면 내 bash 쉘로 돌아갑니다.
답변
for DIR in * ; do rsync -a $DIR example.com:somewhere/ || break; done
개별 rsync 실행이 어떤 이유로 실패하면 루프를 종료합니다.
답변
Dennis의 답변을 확장하기 위해 코드는 다음과 같습니다.
trap "echo Exited!; exit;" SIGINT SIGTERM
rsync와 관련된 실제 예제를 보려면 http://gist.github.com/279849를 확인하십시오 .
답변
Control-C에 대한 트랩을 설정할 수 있습니다.
trap <command> SIGINT
command
Control-C를 누르면를 실행합니다 . trap
효과를 발휘할 지점에서 스크립트 어딘가에 문장을 넣으십시오 .
답변
괄호 안에 명령 문자열을 넣으면 문자열이 단일 프로세스로 작동하고 SIGINT를 수신하고 Ctrl– 를 누르면 종료됩니다 C.
(for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done)
그러나! rsync
명령 의 경우 여러 소스를 허용하므로 작성한 코드는 다음과 같이 더 잘 작성됩니다.
rsync -a * example.com:somewhere/
답변
답변
루프에 쉽게 중단 될 수있는 다른 명령을 넣는 경향이 있습니다. 두 개의 Ctrl-C를 눌러야합니다.
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; sleep 1 ; done
이 rsync에 대한 훌륭한 솔루션은 아니지만 아마도 빠르게 실행하고 싶을 것입니다. 그러나 다음과 같은 다른 루프에서는 잘 작동합니다.
while true ; do ping -c 10 example.com ; sleep 1 ; done
이 루프는 루프를 통해 매번 example.com의 주소를 다시 검색하므로 DNS 변경을보고있는 경우 유용합니다.