Portál AbcLinuxu, 12. května 2025 12:33

Dotaz: Hledám radu ohledně funkcí v shellu

9.12.2012 20:49 LSD
Hledám radu ohledně funkcí v shellu
Přečteno: 256×
Odpovědět | Admin
Zdravím všechny, poradí mi někdo, jak udělat něco takového?

mám funkci
function one () {
# tato funkce zpracuje data které zaberou +/- hodně moc paměti
}

function two () {
# normalni funkce která pracuje s daty které vytvořila funkce one
}
Otázka, jak můžu zcela ukončit první funkci a spustit druhou funkci? Děkuji za pomoc
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.12.2012 21:00 l4m4
Rozbalit Rozbalit vše Re: Hledám radu ohledně funkcí v shellu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kde zaberou data funkce one() hodně paměti?

(a) Pokud v shellu, tak se pravděpodobně pokoušíš o něco, co není dělat v shellu dobrý nápad (případně nemáš přesnou představu, co v shellu zabírá paměť a jak). Tento případ se převede na (b) tak, že one() nebude funkce, ale skript.

(b) Pokud v nějakém jiném procesu, tak to není problém, proces skončí, vyrobí výsledek -- nejspíš soubor -- a s tím se pracuje dál.
9.12.2012 22:44 LSD
Rozbalit Rozbalit vše Re: Hledám radu ohledně funkcí v shellu
(b) tak, že one() nebude funkce, ale skript.
Velké díky, teď to ukazuje v shelu, místo 8% využité paměti jen 0.1% využité paměti.
9.12.2012 23:41 LSD
Rozbalit Rozbalit vše Re: Hledám radu ohledně funkcí v shellu
Teď jsem narazil na problém :-(
pokud mám kód:

.
..
...
/root/main.sh # Spustím script
echo ${#ARRAY[@]} # výsledek je vždy 0
...
..
.
v souboru /root/main.sh mám: ARRAY=("ahoj" "nazdar" "bazar")

pokud soubor načtu pomocí source, tak vše funguje, co je špatně?
10.12.2012 00:11 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Hledám radu ohledně funkcí v shellu

Tazko povedat, co presne robite. Ale velmi pravdepodobne je problem v tom, kde sa dany kod vykona. Ak sa pouzije source, tak sa kod vykona v aktualnom shell-i. Ak sa to spusti ako skript, tak sa automaticky spusta subshell. Dane pole by muselo byt exportnute, aby bolo dostupne aj v shell-i, ktoreho je potomkom.

 

A bude lepsie, ak sem budete davat kod, nez bodky atd ...

10.12.2012 13:29 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Hledám radu ohledně funkcí v shellu
Ignoroval jste drobný detail: "vyrobí výsledek -- nejspíš soubor". Pokud výsledek máte v poli (tedy v paměti) v daném procesu, ukončením procesu o něj přijdete. Paměť uvolníte tím, že výsledek procesu one uložíte do souboru, a pak si jej z něj přečtete procesem two (který jej patrně nebude celý načítat od paměti, protože to byste tu paměť zase zabral, to by bylo na hlavu).
10.12.2012 12:03 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Hledám radu ohledně funkcí v shellu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chcelo by to konrétnejšiu otázku. V skutočnosti môže byť najefektívnejšie vykonávať obe činnosti one() aj two() súčastne, údaje spracovávať streamovo a výstup funkcie one() posielať okamžite na vstup two() napr. cez pipe. To ale bez podrobnejšieho zadanie nevieme povedať.
Otázka, jak můžu zcela ukončit první funkci a spustit druhou funkci?
Ako to robíš teraz, že tomu tak nie je? Lebo štandardné správanie sa je presne to, čo požaduješ:
#! /bin/bash

function one () {
# tato funkce zpracuje data které zaberou +/- hodně moc paměti
}

function two () {
# normalni funkce která pracuje s daty které vytvořila funkce one
}

one

two
Po skončení one() sa spustí two().

Mimochodom, syntax function name () command je neprenositeľný bashizmus, POSIX-ovo prenositeľný zápis je name () command.
10.12.2012 12:11 chrono
Rozbalit Rozbalit vše Re: Hledám radu ohledně funkcí v shellu
Na začiatku je #! /bin/bash, takže nevadí, že to bude fungovať iba v bash. :)
10.12.2012 12:17 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Hledám radu ohledně funkcí v shellu
Áno, na začiatku mojej verzie je bash, ktorý som tam pridal práve preto, lebo nasledujúci kód je bash-specific. Opytujúci sa bash nikde explicitne nespomína, práve naopak, pýta sa, ako to urobiť v shell-i.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.