[ pisac @ 21.06.2016. 02:07 ] @
Imam nekoliko uslova koje treba da testiram i pri prvom uspešnom preduzmem radnje a ostali se zanemariju:

Code:
if a; then trt
elif b; then prd
elif c; then kak
else jbg


Medjutim, to treba da uradim random redosledom, kako ne bi uvek isti uslov 'a' bio prvi u testiranju.

E, nemam ideju kako to da uradim a da bude kompaktno i elegantno.
[ srbaja @ 21.06.2016. 09:17 ] @
Da li 'jbg' treba uvek da bude na kraju? Da li 'trt' uvek sledi posle 'if a' ili se randomizuje samo uslovi a akcije su uvek istim redosledom?
[ jablan @ 21.06.2016. 09:59 ] @
Code:
#!/bin/bash
( $(exit $(( (RANDOM % 4) ))) && echo 'foo' ) || ( $(exit $(( (RANDOM % 4) ))) && echo 'bar' ) || ( $(exit $(( (RANDOM % 4) ))) && echo 'baz' ) || echo 'fee'


nek proveri neko ko se bavi shell scriptingom.

A pre toga pročitaj ovo: http://mywiki.wooledge.org/XyProblem i reci koji problem želiš da rešiš, a ne kako misliš da ga rešiš.

[Ovu poruku je menjao jablan dana 21.06.2016. u 11:12 GMT+1]
[ pisac @ 21.06.2016. 13:56 ] @
Nije ista logika, kod tebe je svaka provera uslova random a meni treba samo random redosled a ne random provera.

Drugim rečima kod tebe može da se desi da se 'jbg' dobije i ako su sva tri uslova ispunjena, ako tako random odluči

'jbg' je uvek na kraju, 'trt' je uvek akcija za 'a', 'prd' je uvek akcija za 'b', a 'kak' je uvek za 'c', i svi uslovi moraju da se provere pre nego što se uradi 'jbg' jer je 'jbg' jako loša stvar

Problem je lepo opisan, još samo da nađem lepo rešenje .

Problem je u stvari prost, imam 3 voip tranka i preko nekog od njih treba da prosledim poziv, ako ne radi neki idem na sledeći, i tako do 'jbg' odustajanja. Međutim ne želim da pozivi uvek idu preko 'a' tranka, već da se sve svaki put proverava random redosledom.

[ jablan @ 21.06.2016. 14:08 ] @
Mislim da pred bash postavljaš malo previsoke zahteve. Tj, i kad budeš uspeo da uradiš to što hoćeš, taj kod neće moći niko živ posle toga da održava. Predlažem ti da to što ti treba napišeš u nekom poštenom skripting jeziku, dakle perl, python ili ruby, u kojima je to što hoćeš trivijalno za napisati. Ako se odlučiš za ruby, mogu da ti pomognem.
[ pisac @ 21.06.2016. 14:31 ] @
Hajde ako je u pajtonu trivijalno, ko zna primer za pajton? Ne bih zalazio u rubi i perl.
Može čak i za PHP. Ja ne vidim elegantno rešenje nigde, a zanima me baš nešto elegantno.

[ jablan @ 21.06.2016. 16:20 ] @
Verovatno može kraće, ali ideja je:

Code:

import random

arr = [
        ( lambda: random.random() > 0.5,
            'foo'
            ),
        ( lambda: random.random() > 0.5,
            'bar'
            ),
        ( lambda: random.random() > 0.5,
            'baz'
            )
        ]

random.shuffle(arr)

for uslov, akcija in arr:
    if uslov():
        print(akcija)
        break


dosta zavisi u kom su ti obliku uslovi i akcije koje imaš, ali je ideja ta da imaš niz nečega (VOIP trankova npr), i svaki put ga promešaš pre nego što kreneš da iteriraš.

[Ovu poruku je menjao jablan dana 21.06.2016. u 17:34 GMT+1]
[ Aleksandar Đokić @ 21.06.2016. 22:00 ] @
Ti bi da napravis load-balancing na tezi nacin, cemu to? Mislis da ce to raditi pouzdano?
[ pisac @ 22.06.2016. 03:34 ] @
Ima i lakši način?