Jak inaczej w bash, lub w ogóle w perl rozwiązać taką potrzebę:
?Kod:#!/bin/bash FILE='/tmp/xxc' function checkit() { sleep 5 test -e $FILE &> /dev/null } while [ $? -eq 0 ]; do checkit done echo -e "File $FILE not found\nWhat next..?"
Jak inaczej w bash, lub w ogóle w perl rozwiązać taką potrzebę:
?Kod:#!/bin/bash FILE='/tmp/xxc' function checkit() { sleep 5 test -e $FILE &> /dev/null } while [ $? -eq 0 ]; do checkit done echo -e "File $FILE not found\nWhat next..?"
***********
* markossx *
***********
Tak dlugo jak dlugo plik jest, proces nic nie robi. Jak plik zninie, dostajesz komunikat i exit(1) czyli mozesz to zlapac w shell'u albo dac inny exit np pod nagiosa.Kod:#!/usr/bin/perl use strict; my $FILE = '/tmp/file'; while (! -e $FILE) { print "File $FILE not found\nWhat next..?\n"; exit 1; } else { sleep 5; }
Specjalnie konstrukcja ma 2 przypadki, bo jeszcze jest mozliwosc przerwania aplikacji przez kill() albo Ctrl+C a wtedy nie powinno wyemitowac exit(1) tylko zakonczyc prace normalnie bez zwracania bledu.
O takie cos chodzilo?
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)
Idealne uproszczenie mojego rozwiązania,
a jakieś inny algorytm na ten sam problem?
Może są jakieś inne sposoby na osiągnięcie
tego samego rezultatu?
***********
* markossx *
***********
Jesli chcesz spelnic wszystkie warunki brzegowe ktore podalem wyzej to jedynie takie cos - ewentualnie inna notacja (TIMTOWTDI) ale zasada ogolnie ta sama.
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)
Dlaczego drążę?
Czy to jest już rekurencja,
czy w ogóle da się rozwiązać to rekurencyjnie?
***********
* markossx *
***********
To nie byla rekurencja, ale to jest:
Skrypt rekurencyjnie odpala samego siebie ale nie przez system() ktory powodowalby ze wywolujacy skrypt czeka na zakonczenie procesu potomnego (DoS przez zuzycie calego RAMu) tylko przez uzycie exec() - rodzic konczy dzialanie i przekazuje kontrole do procesu potomnego. Taka rekurencja w stylu bash'a bardziej nieco ale rekurencja.Kod:#!/usr/bin/perl use strict; my $FILE = '/tmp/file'; if (! -e $FILE) { print "File $FILE not found\nWhat next..?\n"; exit 1; } else { sleep 5; exec($0); }
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)
Jasne, dzięki Sherlocku
***********
* markossx *
***********
Jaka rekurencja chłopaki ? rekurencja występuje wtedy jeśli w kodzie funkcji wywołujemy tę funkcję czyli np:
function myFunction()
{
if int a==1 myFunction()
else
}
najlepszym przykładem może być liczenie potęgi za pomocą rekurencji.
A jak nazwiesz fakt ze program wywoluje samego siebie aby wykonac nastepny cykl?
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)
Może przeoczyłem ten fakt czasami coś palnę bez sensu : P