다양한 크기의 .mkvs를 ipod/iphone 크기의 .mp4s로 자르기/크기 조정하는 일괄 변환 스크립트가 있습니다. 원래 크기, 필요한 자르기, 출력 파일을 결정하면 모두 정상적으로 작동합니다. 그러나 첫 번째 변환이 성공적으로 완료되면 HandbrakeCLI는 상위 스크립트를 종료합니다. 왜 이럴 수 있니? 어떻게 멈출 수 있습니까?하위 프로세스 (HandbrakeCLI)가 상위 스크립트가 종료되지 않도록 방지
코드, 그것은 현재의 약자로 :
#!/bin/bash
find . -name "*.mkv" | while read FILE
do
# What would the output file be?
DST=../Touch/$(dirname "$FILE")
MKV=$(basename "$FILE")
MP4=${MKV%%.mkv}.mp4
# If it already exists, don't overwrite it
if [ -e "$DST/$MP4" ]
then
echo "NOT overwriting $DST/$MP4"
else
# Stuff to determine dimensions/cropping removed for brevity
HandbrakeCLI --preset "iPhone & iPod Touch" --vb 900 --crop $crop -i "$FILE" -o "$DST/$MP4" > /dev/null 2>&1
if [ $? != 0 ]
then
echo "$FILE had problems" >> errors.log
fi
fi
done
내가 추가로 트랩을 시도했지만 (마지막 트랩 화재 했더라도) 그
trap "echo Handbrake SIGINT-d" SIGINT
trap "echo Handbrake SIGTERM-d" SIGTERM
trap "echo Handbrake EXIT-d" EXIT
trap "echo Handbrake 0-d" 0
을 동작을 변경하지 않았다
덧붙여 편집 :
'0'함정이 발사되어 그 이유를 조사하게되었습니다. bash -x $script
으로 실행하면 find | while read
루프가 너무 일찍 끝나는 것으로 나타났습니다.
나는 find와 encode를 별도의 스크립트로 재구성했다. 이제 찾기 루프가 있습니다 :
find . -name "*.mkv" | while read FILE
do
handbrake-touch "$FILE"
if [ $? != 0 ]
then
echo "$FILE had problems" >> errors.log
fi
done
동작은 동일하고 하나의 인코딩 다음에 while 루프가 끝납니다. 'handbrake-touch'대신 'echo $ FILE'을 넣으면 모든 파일이 나열됩니다. 현재 디렉토리가 변경되지 않습니다 (무엇이 find | while
을 손상 시킬지 궁금합니다).
유행을 켜고 출구가 정확히 어디에서 일어나는지 확인하기 위해 유행의 끝에'-x'를 추가하십시오. –