LINUX.ORG.RU

bash скрипт с остановкой и последующим продолжением

 ,


0

1

Доброго времени суток, жители ЛОРа

Взываю к вашей мудрости, задача такая: Есть скрипт на баше, он обходит большой файл(длинный список) по циклу, через каждые n позиций списка он должен выполнить заданную команду (например, echo «hello») и дождаться действия юзера. Под действием юзера на данный момент я понимаю, запуск того же скрипта, он же сам умный(скрипт) продолжит с нужного места. Как такое можно организовать? Если есть идеи по другой организации, то готов сделать. Заранее спасибо.

Под действием юзера на данный момент я понимаю, запуск того же скрипта, он же сам умный(скрипт) продолжит с нужного места. Как такое можно организовать?

1. сохранить место в файле. Файл можно записать в $HOME/.local/share/ или в /var/tmp/

2. при запуске проверять наличие файла и его читать.

emulek ()

Есть скрипт на баше, он обходит большой файл(длинный список) по циклу, через каждые n позиций списка он должен выполнить заданную команду (например, echo «hello») и дождаться действия юзера.

Счётчик, блокироваться на ввод (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_08_02.html)

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

это не совсем подходит - скрипт будет работать на удаленном серваке, поэтому, вариант с блокировкой на ввод не прокатывает...

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

хранить в там что-то типа номера последней обработанной строки?

ну как вариант. Можно читать файл например через фильтр cat -n или через фильтр sed =, номера строк отделять от самих строк, а в след. раз использовать фильтр head -n $LINE_NUM или sed -n «/$LINE_NUM/,$p».

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

в принципе можно задействовать dd, и обрабатывать файл кусками скажем по 100К. Т.е. копируешь dd первые 100К, обрабатываешь, потом след. 100К и т.д.

emulek ()
Ответ на: комментарий от lexabb

Почему не прокатывает - можно держать его в отдельной screen-сессии. Или держать свой файл в /var/tmp, куда сохранять позицию, на которой закончилась обработка.

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

работа с серваком не обязательно будет с одного устройства, дома с персоналки, вне, например, метро, со смарта. отдельная скрин-сессия этому не удовлетворит, или я что-то не понимаю? извини если та, можешь отдельно пояснить?

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

dd копирует по килобайтно

dd может копировать как угодно.

может взять в обработку последнюю строку не полностью?

конечно. Самое простое: не копировать, а _добавлять_ к файлу ещё 100К, если первых 100К мало. Это довольно просто, если конечно не бывает строк длиннее 100К. Ну можно копировать и по одному байту, если памяти очень жалко, а на скорость наплевать.

emulek ()
Ответ на: комментарий от lexabb

screen это tty-мультиплексор. Проще говоря, вызываешь screen - получаешь отдельную сессию с шеллом, в котором можешь запускать что угодно - любые блокирующие ввод скрипты, etc, а потом отсоединяться, и это всё дело будет работать в фоне. Можешь оборвать ssh-сессию и перезайти с другого устройства и возобновить работу - на экране возникнет то же самое, что видел прошлый раз. Люди так часто держат rtorrent или irc-клиенты.
Проще попробовать, почитай http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/

Reinar ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.