zsh를 실행하는 터미널에 다음을 입력하면 (각 줄은 명령입니다)
babel www/scripts6/lib/data.js > www/scripts/lib/data.js &
babel www/scripts6/lib/user.js > www/scripts/lib/user.js &
babel www/scripts6/lib/profile.js > www/scripts/lib/profile.js &
babel www/scripts6/lib/d3-and-svg.js > www/scripts/lib/d3-and-svg.js &
babel www/scripts6/main.js > www/scripts/main.js &
while [[ $(jobs) =~ 'babel' ]]; do echo 'moo'; done
약 3 초간 멈춘 후 멈 춥니 다. 그러나 moo.zsh 파일에 똑같은 코드를 넣은 다음 터미널에서 실행하면
zsh moo.zsh
1 초 이내에 완료되며 전혀 울리지 않습니다. 왜 일어 났습니까?
비대화 형 셸에서는 전체 작업을 제어 할 수 없습니다. jobs
명령 대체에서 시작 하면 서브 쉘에서 실행되었습니다. 이 서브 쉘에서는 실행중인 작업이없고 아무것도 얻지 못합니다.
대화식 쉘에서 MONITOR가 설정되어 완전한 작업 제어를 제공합니다. 이 경우 zsh
서브 쉘에 들어갈 때 모든 작업을 테이블에 저장하고 서브 쉘에 작업이없는 경우 해당 작업 테이블을 사용합니다.
로 zsh
위의 4.3, 당신은 넣어 비 대화식 쉘에서 작업 제어를 켤 수 있습니다 -m
오두막 라인 :
#!/usr/bin/zsh -m
또는 사용 setopt
:
setopt monitor
: The rest of script goes here
작업 상태를 확인하는 더 좋은 방법은 다음과 같습니다.
#!/usr/bin/zsh
zmodload zsh/parameter
babel www/scripts6/lib/data.js > www/scripts/lib/data.js &
babel www/scripts6/lib/user.js > www/scripts/lib/user.js &
babel www/scripts6/lib/profile.js > www/scripts/lib/profile.js &
babel www/scripts6/lib/d3-and-svg.js > www/scripts/lib/d3-and-svg.js &
babel www/scripts6/main.js > www/scripts/main.js &
while (( ${#jobstates} )); do
print "moo"
done
어쨌든 내장 된 wait로 모든 자식 프로세스를 기다릴 수 있습니다 .
babel www/scripts6/lib/data.js > www/scripts/lib/data.js &
babel www/scripts6/lib/user.js > www/scripts/lib/user.js &
babel www/scripts6/lib/profile.js > www/scripts/lib/profile.js &
babel www/scripts6/lib/d3-and-svg.js > www/scripts/lib/d3-and-svg.js &
babel www/scripts6/main.js > www/scripts/main.js &
# Wait for all children
wait
echo END
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다