Если человек не знает, куда он плывёт – для него нет благоприятных ветров.

Идея скорее всего не нова, но я просто сам для себя придумал, как сделать рекурсию в командной строке/терминале.

В общем проблема у меня была в том, что есть у меня терминальный клиент/ключик для доступа в интернет.

Провайдер у нас конечно молодец, не спорю.

Только вот, если бы интернет был всегда стабилен, было бы хорошо, запустил ключик и интернет есть. Но нет, инет иногда отсутствует и ключик, сделав несколько неудачных попыток присоединится, завершается. А потом, когда инет появляется – у меня его не будет т.к. клиент не запущен. В результате чего ночью или в моё отсутствие торрент не будет работать или же какие либо закачки не загрузятся.

Вот я и подумал, хорошо бы если бы что-то контролировало наличие включенного клиента. Но для этого нужно читать man cron, а так же что делать если клиент будет запущен? Тогда нужно думать еще и об операторе if then для всего этого, а так же знать способ проверки наличия запущенного приложения. Всё сложно.

Тогда я решил пойти другим путём: а нельзя ли сделать так чтобы после завершения программы она запускала сама себя?

Так это же обыкновенная рекурсия.

Но как можно осуществить такое в терминале?

Запрос в гугл : Как сделать рекурсию в командной строке?

Ничего не даёт, мало того, даже выводит мою же запись в топ :twisted:

В общем, не долго думая, я придумал как это сделать.

В качестве функции, которая вызывает сама себя в терминале, у меня будет выступать исполняемый файл.

Вот пример. Создаём файл, для примера, с именем client, в который заносим следующий код:



#!/bin/bash

ping -c 5 yandex.ru

./client



Где у нас «#!/bin/bash» строка, которая при добавлении в текстовый файл делает его исполняемым, «ping -c 5 yandex.ru» – пример команды, которая со временем завершиться, в нашем случае это пинг yandex.ru, который завершиться после 5 попыток, «./client» вызываем сам файл. То есть по завершению команды пинг, файл вызывает сам себя т.е. происходит рекурсия.

Но конечно нужно понимать, что это рекурсия и если что-то напутать то мы можем получить бесконечный цикл и положить систему.

Всё 8).

Далее, чтобы запустить всё это даём файлу права на исполнение, а далее в терминале вводим ./client или же, что я и сделал, создаём себе на панели кнопку запуска с параметром запускать в терминале и вводим команду ./client.

Теперь по завершению команды, она будет запускаться вновь сама же.










@темы: IT, NewcoreDiary, Linux, Софт