for 루프에서 일시 중단 된 프로세스 재개


13

bash에서 실행 중입니다.

for i in ull-*.pbm; do convert $i tmp2/$i.pdf ; done

나는 Ctrl-Z달리기의 중간에 fg작업 ID가 있습니다. 그러나 나머지 반복은 계속 완료되지 않습니다. 왜 궁금해?


2
나는에 대한 사항을 확인 할 수 있습니다 for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash는 버전 4.2.53)
Hauke Laging

답변:


11

Ctrl-Z현재 실행중인 프로세스를 일시 중단합니다. 표현

for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done

를 제외한 모든 명령 convert(즉 for, in, dodone)입니다 bash현재 쉘에서 실행의 키워드와 쉘 자체를 중단 할 수없는 (그리고 어쨌든 당신의 의도되지 않습니다). 당신이 명중 할 때 그래서 Ctrl-Z, 및 명령 convert의 중단을 처리하는 데 아무 이상이 없기 때문에, 루프는 단순히 종료됩니다.

전체 루프를 일시 중단하려면 서브 쉘 환경에서 실행하십시오.

(for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done)

내가 아는 유일한 쉘은 현재 쉘에서 전체 루프를 일시 중단 할 수 있다는 것입니다 zsh.


4
아니, Ctrl-Z하나의 변환 인스턴스를 일시 중단 할 수 있습니다. 루프가 계속해서 다른 변환 인스턴스를 시작할 수없는 이유는 없습니다. 어떤 이유로 bash루프를 중지합니다. dash루프 에서 테스트를 계속하면 다른 쉘도 동일하게 작동합니다.
Graeme

6
@Graeme은 한 번의 반복을 중단하고 루프를 계속하면 다음 단계가 이전 단계에 따라 달라질 수 있으므로 위험합니다. 나를위한 유일한 합리적인 해결책은 전체 루프를 일시 중단하고 하위 쉘에서 수행 할 수 있습니다 (실제로 zsh현재 쉘에서 실행되는 전체 루프를 일시 중단 할 수 있음).
jimmij

3
아마도 답이 될 것입니다. bash개발자는 당신과 같은 의견을 가지고 있었을 것입니다. 루프를 계속하는 것은이 off 상태로 픽업 (아마도에서 동작 될 것이다 당신이 자연 보인다 쉘 과정과 손 제어 등을 중지 할 때 나는,하지만 기대 한 것이 무엇 여전히 bash그들이 추가하지 않은 경우 다른 일을하는 코드).
Graeme
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.