Я запускаю команду из терминала, которая проходит через каталог, проверяющий файлы мультимедиа, а затем извлекает данные с субтитрами из этих файлов. К сожалению, даже если нет закрытых данных субтитров, программа все еще обрабатывает весь файл, и это может занять много времени. То, что я хотел бы сделать, это проверить выход через 60 секунд и искать данные, а если файл пуст, завершите процесс и перейдите к следующему файлу.Shell Script: убить программу после установленного времени, если выходной файл пуст
Моя старая команда выглядит следующим образом
for i in */*.vob
do
/home/me/ccextractor/linux/ccextractor -out=srt -utf8 -trim "$i"
done
Я экспериментировал с sleep
, но я не могу заставить его работать. Какие-либо предложения?
РЕШЕНИЕ
С помощью ответов ниже (обратите внимание на комментарии, а), мой последний рабочий код:
for i in */*.vob
do
/home/me/ccextractor/linux/ccextractor -out=srt -utf8 -trim "$i" &
pid=$!
sleep 15
srtfile=$(expr "${i}" | sed -r 's/.{4}$//')
fgrep -q "1" "${srtfile}.srt" || kill $pid
wait $pid
done
Возможно, поиск 'timeout' вместо' sleep', см. [This] (http://stackoverflow.com/q/5161193/3076724). Кроме того, рассмотрите возможность повторного написания своего однострочного шрифта в качестве обычного сценария bash для улучшения читаемости вопроса. – BroSlow
Спасибо BroSlow за предложения. Я также обновил форматирование, чтобы другие могли прочитать вопрос и решение в будущем. –