bash에서 for 루프를 깨지만 반복이 완료된 후에만 가능합니까?

bash에서 for 루프를 깨지만 반복이 완료된 후에만 가능합니까?

중단/중지할 수 있는 방법이 있나요?~을 위한-loop bash, 그러나뒤쪽에현재 반복이 완료되었습니다. "사이"완벽한그리고하다?

나는~을 위한- 하나의 명령을 사용하여 여러 디렉터리를 반복하는 것은 완료가 허용되지 않는 한 파괴적일 수 있습니다. 따라서 한 디렉터리가 완료되고 다음 디렉터리가 시작되기 전에 명령을 중지하고 싶습니다.

sleep(예, 이전에 또는 read명령을 추가할 수 있다는 것을 알고 있습니다.완벽한- 하지만 나는아니요, 루프가 이미 실행 중입니다...)

답변1

~을 위한이미 실행 중: 명령이 다음과 같다고 가정합니다.프로그램그래서 어렸을 때 뛰었지프로세스스크립트(또는 그 일부)를 실행하는 셸 아래에서그리고스크립트는 입력을 위해 heredoc 또는 herestring을 제공하지 않습니다.또는해당 입력을 읽었거나 최소한 버퍼링했으며 중지할 수 있습니다.~ 후에프로세스마치다통과:

  • kill -STOP쉘(그래서 아무것도 하지 않을 것입니다.뒤쪽에현재 명령)
  • 자식 프로세스가 완료되고 좀비 상태가 될 때까지 기다립니다.
  • kill -KILL껍데기

root( 물론 모두 동일한 사용자 또는 다른 셸에서 수행됩니다.) 주체가 do ... done각 반복에서 두 개 이상의 작업을 수행하는 경우 해당 작업은 이후에만 캡처됩니다.해당 프로그램을 얻을 수 있을 만큼 실시간으로 충분히 오랜 시간이 걸리는 프로그램. -STOP이 프로그램은 반복의 마지막 프로그램일 수도 있고 아닐 수도 있습니다.

일부(많은?) 경우에는 kill -KILL단순히 셸을 미리 처리하여 셸이 평소처럼 하위 항목을 정리하는 것을 방지하고 하위 항목을 실행하여 결국 수확하도록 합니다 init(또는 시스템에서 이에 상응하는 항목). 그러나 이가능한자식이 일부 I/O 오류, 환경 차이, 오류 또는 손자 변경 사항을 보게 하여 피하려고 하는 "파괴적인" 결과를 유발할 수 있습니다.

답변2

반복에 포함된 내용과 빌드 방법에 따라 실행 파일의 링크를 해제한 다음 스크립트를 중단할 수 있습니다. 예를 들어 스크립트는 다음과 같습니다.

do_first_thing && \
do_second_thing && \
do_third_thing

전역적으로 링크를 해제/이동할 수 있다고 가정하면 do_first_thing, 즉 현재 다른 스크립트에서 이를 필요로 하지 않는 경우 다음을 수행합니다.

  • 스크립트가 실행되지 않도록 연결을 해제하거나 이름을 바꿉니다.
  • 반복 ps진행 상황 관찰
  • 루프가 유휴 반복을 시작하면 루프를 종료할 수 있습니다.

또한 스크립트의 첫 번째 명령을 sleepor가 포함된 다른 스크립트에 연결할 수도 있습니다. read그러면 루프를 무해하게 중단할 수 있는 시간과 기회가 제공됩니다.

관련 정보