LINUX.ORG.RU

Нужна небольшая помощь со скриптом

 ,


0

0

Есть скрипт с конструкцией вида:

for file in `ls -1A|grep -Po '[^ ]{11}(?=(\.part$))'`
do
         тут запуск внешнего скрипта, докачивающего $file
done
Проблема в том, что если сделать ^C в момент "тут запуск внешнего скрипта, докачивающего $file", происходит обработка следущего $file.

Как сделать чтобы при ^C происходила остановка for и всего скрипта? Возможно ли это сделать без создания временных файлов?
Может как-то получая код возврата предыдущего $file, но как?

★★★★★

Перехвати ^C через trap, если получил - киляй процесс самого скрипта. То, что в блоке тогда нужно, наверно, отдельным потоком и проверять его статус.

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от alozovskoy

Перехвати ^C через trap, если получил -

можно поподробней, желательно с примером?

киляй процесс самого скрипта

как получить PID скрипта из самого скрипта, а то у меня их может быть запущено несколько экземпляров, и все килять не надо?

То, что в блоке тогда нужно, наверно, отдельным потоком и проверять его статус.

это вообще я не понял

teod0r ★★★★★
() автор топика
Последнее исправление: teod0r (всего исправлений: 1)
Ответ на: комментарий от teod0r

Смотри, в единицу времени у тебя же может только одно действие выполняться, так что есть несколько вариантов:

* Оставить как есть, и тогда если активен процесс «докачивания $file» то отправленный ^C убьет его и цикл примется за следующий файл

* Чтоб всегда оставаться «в скрипте» тебе нужно докачку перевести в бэкграунд. Тогда получится что у тебя вся та куча файлов быстренько выкинется в бэкграунд и, скорее всего, перегрузит твою тачку. За то всегда будешь «в скрипте» и ^C будет получать именно твой скрипт, а не его подпроцессы.

* Чтобы не перегружать твой хост я предлагаю отправлять подпроцессы в бэкграунд, но при этом получать их PID, потом ждать, пока он (подпроцесс) не закончит выполнение, и только потом уже брать следующий файл.

alozovskoy ★★★★★
()

почему бы тебе просто не нажать ^Z :-D А потом если передумал и хочешь докачать файл - fg, а если нет - ^C.

anonymous
()
Ответ на: комментарий от alozovskoy

Было интересно глянуть.

З.Ы. Вот раньше были треды на форуме, два поста: вопрос и ответ. И всё. Никакого флуда :)

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от alozovskoy

цикл примется за следующий файл

мне как раз это не нужно, я же писал.

teod0r ★★★★★
() автор топика
Ответ на: комментарий от unterwulf

а можно теперь как-то сделать, чтоб при нажатии ^C приглашение появлялось нормально в начале НОВОЙ строки?

UPD: разобрался

trap 'echo;exit 1' INT

teod0r ★★★★★
() автор топика
Последнее исправление: teod0r (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.