abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 0
dnes 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 1
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 4
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 27
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 796 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Jak udržet proměnné ve funkci

26.10.2012 12:14 Dave
Jak udržet proměnné ve funkci
Přečteno: 365×
Ahoj, mám dvě funkce, v té první mám nastaveny pomocí "local" všechny proměnné aby se nedostaly mimo tu funkci (aspoň jsem v tom omylu doposud žil) jenže výsledek je: 111222333. Proč není jen 333? Dík za radu
#!/bin/bash

function fce_one ()
{
   local SKP ABV SSD
   SKP="111"
   ABV="222"
   SSD="333"

   fce_two "$SSD"
}         


function fce_two ()
{
   echo "$SKP $ABV $SSD"
}         

fce_one

Řešení dotazu:


Odpovědi

26.10.2012 12:45 kuka
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
No on bash je svet sam pro sebe...

This is documented in the Bash manual:

"Local can only be used within a function; it makes the variable name have a visible scope restricted to that function and its children." The ABS Guide author considers this behavior to be a bug.
26.10.2012 12:48 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Proč není jen 333?

Viz vysvětlení odkazující na man bash.

všechny proměnné aby se nedostaly mimo tu funkci

Jaký je účel? Obvykle přeci stačí, aby funkce označila svoje proměnné jako local a nepoškodila tak cizí.

I am always ready to learn although I do not always like to be taught. (W. Churchill)
26.10.2012 13:00 kuka
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Ten jednoduchy priklad v dotazu to ukazuje celkem jasne. Funkce fce_two se bude chovat ruzne podle toho, jestli se zavola z fce_one nebo odjinud. Tzn. implementacni zmena ve fce_one ma dosah mimo fce_one, coz je klasicka nocni mura kazdeho programatora. Ale samozrejme bash neni urcen na vetsi veci a tak to tolik nevadi.
26.10.2012 13:16 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci

Já jsem totiž (mylně) předpokládal, že se bash korektně (z pohledu jiných jazyků) popere s překryvem lokální/globální proměnné. Pak by totiž celý problém byl v tom, že se používají globální proměnné. Bohužel, následující kód

#!/bin/bash

fce1() {
	local GLOBAL
	GLOBAL="prepsano"
	fce2
}

fce2() {
	echo "GLOBAL = $GLOBAL"
}

GLOBAL="prvni"
fce2

GLOBAL="druhy"
fce1
fce2

vypíše

GLOBAL = prvni
GLOBAL = prepsano
GLOBAL = druhy

což je poněkud matoucí.

I am always ready to learn although I do not always like to be taught. (W. Churchill)
26.10.2012 14:52 l4m4
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Mylný pohled je především to, že je lokální/globální znamená ve všech jazycích totéž. Ve skutečnosti existují v různých jazycích lexikální, dynamické a různé obskurnější rozsahy platnosti.

Bash má naprosto běžný dynamický rozsah platnosti, tj. lokální proměnná je omezena na dobu vykonávání funkce, nikoli na její tělo. Tvůj příklad ukazuje, že funguje korektně.
29.10.2012 15:46 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Proměnné shellu nejsou jako proměnné programovacího jazyka. Můžete se na to dívat tak, že funkce je vlastně něco jako samostatný podskript (byť vykonávaný stejným procesem) a má svůj vlastní environment, který je sdílen s "rodičem" kromě proměnných explicitně označených jako lokální. Pak to chování dává smysl.
26.10.2012 13:07 Dave
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Díky a můžu to napsat třeba v php? Pokud ano, jde ta funkce pak zavolat a spustit na pozadí?
 fce_one &
Díky
26.10.2012 13:18 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Díky a můžu to napsat třeba v php? Pokud ano, jde ta funkce pak zavolat a spustit na pozadí?

Ano. Ano. (A co doopravdy potřebujete?)

I am always ready to learn although I do not always like to be taught. (W. Churchill)
26.10.2012 14:55 l4m4
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Ne. Ne.

Tělo funkce v shellovém skriptu je tvořeno příkazy shellu, nikoli náhodného programovacího jazyka. (A na co se doopravdy ptáš?)
26.10.2012 15:07 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Ne. Ne.

:-D Já si myslím, že stejné funkcionality jako je ukázka jde dosáhnout i v PHP. A funkci shellu lze pustit na pozadí.

I am always ready to learn although I do not always like to be taught. (W. Churchill)
26.10.2012 16:12 l4m4
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Já myslím, že ,to` je funkce v shellovém skriptu.

Na druhou otázku lze, pravda, odpovědět i ano, pakliže se nejprve zkoriguje podle odpovědi na první.
26.10.2012 15:54 Dave
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Tak chci programovat něco v linuxu, bash je kupodivu k "ničemu" respektivně k něčemu zcela jínemu jen ne k nějakému velkému projektu. No tak to zkusím v PHP ale ještš jsem nezačal a už je problém :-(
26.10.2012 16:08 Kit
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Bash má svůj význam a dají se v něm napsat hezké aplikace. Práce s proměnnými je u něj občas trochu podivná, ale o to lépe pracuje se soubory, resp. jednoduše přesměruje požadavek na jinou aplikaci, která to za něj udělá. "shell" je vlastně jen skořápka, která skoro nic nedělá.

PHP zkusit můžeš, také jsem si v něm napsal pár lokálních aplikací. Také můžeš zkusit Python. Tím výběr nekončí, záleží jen na tom, co chceš programovat.
26.10.2012 16:19 l4m4
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Ano, bash je k něčemu jinému. Bash je totiž shell.

Shell je příkazové rozhraní operačního systému, tedy především věc umožňující spouštět interaktivně programy. Moderní shelly mají různé vychytávky, včetně podmínek, cyklů a pod., ale pořád jde o totéž.

Pokud ti někdo tvrdil, že shell (jakýkoli) je programovací jazyk vhodný pro systém řízení letového provozu, tak ti lhal.
26.10.2012 16:22 l4m4
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Jo, a PHP taky není jazyk pro velké projekty. A především ne, pokud ten projekt nemá nic společného s webem. Pokud ti někdo tvrdil, že je, tak ti lhal.

Obecně bych doporučil zkusit Python, ale bez znalosti typu projektu těžko říci.
rADOn avatar 29.10.2012 15:14 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Jak udržet proměnné ve funkci
Bash je shell, takto podstatně více "k něčemu" než cmd.exe. Pokud chceš něco "programovat" tak popiš co řešíš a poradíme v čem to udělat.

BTW rada zdarma: neříkej "bash neumí" sic riskuješ že ze sebe uděláš vola. Ber to jako otázku vlastního místa v historii. Bash je starý, starší než wydle. Princip unixového shellu ještě o hodně více. Ergo cokoliv řešíš už řešil milion lidí před tebou a je značně pravděpodobnější že něco děláš blbě než že to "nejde".

Mám to vyzkoušený na vlastní kůži, za svých mladých linuxáckých let jsem takhle "vynalezl" syslog, awk a xargs :-) Wydláci mají naučenou takovou zvláštní dichotomii – všechno buď musí být blbovzdorný grafický klikátko, nebo se musí programovat těmi nejhrubšími protředky. V unixu je obojí extrémní případ kterému je radno se vyhnout.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
30.10.2012 08:59 Ivan
Rozbalit Rozbalit vše OT: Re: Jak udržet proměnné ve funkci
Jo tohle je peklo i v jinych shellech. Treba takovej korn shell je v tomhle pripade mimoradne zaludny. Nejcasteji rozsirena verze ksh89, ktera neni kompatibilni s posix standartem se chova jinak nez verze ksh93, ktera je soucasti RHEL. A aby toho nebylo malo tak jeste navic zavisi na tom, jestli za jmenem funkce uvedes kulaty zavorky anebo ne.

Smir se s tim, ze programovani v shellu ma za sebou desitky let vyvoje a to sebou prinasi ruzne kostlivce.

Založit nové vláknoNahoru

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

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.