Идея скорее всего не нова, но я просто сам для себя придумал, как сделать рекурсию в командной строке/терминале.
В общем проблема у меня была в том, что есть у меня терминальный клиент/ключик для доступа в интернет.
Провайдер у нас конечно молодец, не спорю.
Только вот, если бы интернет был всегда стабилен, было бы хорошо, запустил ключик и интернет есть. Но нет, инет иногда отсутствует и ключик, сделав несколько неудачных попыток присоединится, завершается. А потом, когда инет появляется – у меня его не будет т.к. клиент не запущен. В результате чего ночью или в моё отсутствие торрент не будет работать или же какие либо закачки не загрузятся.
Вот я и подумал, хорошо бы если бы что-то контролировало наличие включенного клиента. Но для этого нужно читать man cron, а так же что делать если клиент будет запущен? Тогда нужно думать еще и об операторе if then для всего этого, а так же знать способ проверки наличия запущенного приложения. Всё сложно.
Тогда я решил пойти другим путём: а нельзя ли сделать так чтобы после завершения программы она запускала сама себя?
Так это же обыкновенная рекурсия.
Но как можно осуществить такое в терминале?
Запрос в гугл : Как сделать рекурсию в командной строке?
Ничего не даёт, мало того, даже выводит мою же запись в топ
В общем, не долго думая, я придумал как это сделать.
В качестве функции, которая вызывает сама себя в терминале, у меня будет выступать исполняемый файл.
Вот пример. Создаём файл, для примера, с именем client, в который заносим следующий код:
#!/bin/bash
ping -c 5 yandex.ru
./client
Где у нас «#!/bin/bash» строка, которая при добавлении в текстовый файл делает его исполняемым, «ping -c 5 yandex.ru» – пример команды, которая со временем завершиться, в нашем случае это пинг yandex.ru, который завершиться после 5 попыток, «./client» вызываем сам файл. То есть по завершению команды пинг, файл вызывает сам себя т.е. происходит рекурсия.
Но конечно нужно понимать, что это рекурсия и если что-то напутать то мы можем получить бесконечный цикл и положить систему.
Всё 8).
Далее, чтобы запустить всё это даём файлу права на исполнение, а далее в терминале вводим ./client или же, что я и сделал, создаём себе на панели кнопку запуска с параметром запускать в терминале и вводим команду ./client.
Теперь по завершению команды, она будет запускаться вновь сама же.
воскресенье, 31 июля 2011
Если человек не знает, куда он плывёт – для него нет благоприятных ветров.