현재 반복 후에 실행 중인 for 루프를 중단합니다.

현재 반복 후에 실행 중인 for 루프를 중단합니다.

여러 원격 서버에서 시간이 오래 걸리는 프로그램을 실행하는 경우가 많습니다.

for NUM in {1..100}; do ssh host-{NUM}.mydomain.com /usr/bin/takesalongtime; done

대부분의 경우 백그라운드에서(즉, 다른 작업을 수행하는 동안 터미널 에뮬레이터에서) 실행되도록 두고 완료될 때까지 기다립니다. 그러나 때로는 루프를 중단하고 나중에 계속하거나 다시 실행해야 하는 경우도 있습니다.

ssh프로세스에서 현재 또는 프로그램을 종료하지 않고 현재 반복 후에 대화형 bash에서 실행 중인 루프를 중지할 수 있는 방법이 있습니까 ?takesalongtime

break;즉, 루프가 명령 사이에 삽입된 것처럼 작동하고 현재 원격 호스트에서 루프가 완료된 후 루프를 중단하도록 뭔가를 하고 싶습니다 .sshdonetakesalongtime

답변1

쉘의 pid를 찾아 sigint를 보내십시오. 이로 인해 ssh가 중지되지는 않지만 완료되면 쉘이 신호를 처리하고 루프를 종료합니다.

$ for i in {1..100}; do ssh -n localhost 'sleep 9;date'; done

다른 터미널에서는

$ ps fax
10636 ?        S      0:00          |   \_ xterm
10638 pts/2    Ss     0:00          |       \_ bash
12164 pts/2    S+     0:00          |           \_ ssh -n localhost sleep 9;date
$ kill -int 10638

&end 에 추가하여 명령을 배경으로 사용하는 경우 kill -hup배경 셸에서 작동합니다 .

관련 정보