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

Dotaz: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti xargs

4.4.2009 22:29 JirkaK | skóre: 15 | blog:
BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti xargs
Přečteno: 527×
Odpovědět | Admin
Ahoj, potreboval bych drobnou radu... :) Mam BASHovy skript, ktery vola program a predava mu parametry pres xargs. Problem je ale v tom, ze potrebuju zjistit navratovou hodnotu volaneho programu; bohuzel si to ale xargs schrousta a misto potrebne nenulove hodnoty (program vraci hodnoty od 0 do 6) vraci 1. Myslel jsem, ze by xargs mohl na tohle mit prepinac, ale nic jsem nenasel. Da se tohle nejak vyresit? Netrvam na pouziti xargs, ale potrebuju stejnou funkcionalitu :) Predem diky.
** Počítač bez window$, to je jako ryba bez bicyklu... ** echo 'Kdo neskáče, není Čech!'|sed s/Čech/cvičená\ opice/
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.4.2009 23:16 bash
Rozbalit Rozbalit vše Re: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti xargs
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co treba vyrobit si pomocny skript, ktery bude poustet tvuj program a navratovou hodnotu zapise do (docasneho)souboru? A v xargs volej tvuj pomocny skript.
4.4.2009 23:29 JirkaK | skóre: 15 | blog:
Rozbalit Rozbalit vše Re: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti xargs
Kdyby to slo takhle, tak bych to mohl rovnou spoustet z toho prvniho skriptu a pomocny skript by ani nebyl treba :) Jenze ja bohuzel nevim, jak to udelat jinak nez pres xargs (docela dlouho jsem se s tim trapil, ale vysledkem byly vzdy spatne predane parametry...)
** Počítač bez window$, to je jako ryba bez bicyklu... ** echo 'Kdo neskáče, není Čech!'|sed s/Čech/cvičená\ opice/
4.4.2009 23:29 JirkaK | skóre: 15 | blog:
Rozbalit Rozbalit vše Re: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti...
Kdyby to slo takhle, tak bych to mohl rovnou spoustet z toho prvniho skriptu a pomocny skript by ani nebyl treba :) Jenze ja bohuzel nevim, jak to udelat jinak nez pres xargs (docela dlouho jsem se s tim trapil, ale vysledkem byly vzdy spatne predane parametry...)
** Počítač bez window$, to je jako ryba bez bicyklu... ** echo 'Kdo neskáče, není Čech!'|sed s/Čech/cvičená\ opice/
5.4.2009 09:19 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti xargs
Odpovědět | | Sbalit | Link | Blokovat | Admin
A k čemu to má být dobré? Přes xargs se vám ten program může spustit několikrát, jak chcete poznat, kterou návratovou hodnotu vzít a kterou ne?
In Ada the typical infinite loop would normally be terminated by detonation.
5.4.2009 10:48 JirkaK | skóre: 15 | blog:
Rozbalit Rozbalit vše Re: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti...
Dobre to ma byt k tomu, ze mam za ukol napsat urcity program, ktery pri nespravne zadanych vstupech vypisuje (ne nutne) chybova hlaseni a zaroven vraci adekvatni navratovou hodnotu. Zaroven mam k dispozici vzorovy program (nikoliv zdrojak :), takze muj napad byl vytvorit soubor s ruznymi vstupy a ty pak sypat vzoroveho i meho programu a provnavat, zda je chovani v poradku. No a problemem je, ze vstupy mohou obsahovat i mezery, a tam - mozna jenom nevim, jak na to spravne - je kamen urazu, i kdyz napisu retezec jako parametr ve tvaru "\"nejaky text\"", dojde k orezani uvozovek a nespravnemu predani parametru (rozsekaneho na vice parametru, ne jeden). Jak jsem tu jiz napsal, vubec nerikam, ze to musi byt resene pres xargs, jestli to jde jinak, budu jedine rad za kazdou radu :)
** Počítač bez window$, to je jako ryba bez bicyklu... ** echo 'Kdo neskáče, není Čech!'|sed s/Čech/cvičená\ opice/
5.4.2009 11:03 l4m4
Rozbalit Rozbalit vše Re: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti...
Pokud máš vstup v nějaké proměnné, tak

program "$proměnná"

by mělo postačovat. Možná se ti ovšem vstup rozpadá, ještě než ho do té proměnné dostaneš -- těžko říci bez kódu. Jsou-li to řádky v souboru, lze použít třeba

while read... done < soubor

Též je možno napsat testovací skript v nějakém normálním jazyce (python, ...), kde použiješ execv() a nemusíš řešit syntaxi shellu...
5.4.2009 13:31 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti...
Tímhle přijdete o spoustu věcí, o které se xargs již stará (počet parametrů pro jednu instanci programu, paralelizace, ...) a budete je muset implementovat znova.
In Ada the typical infinite loop would normally be terminated by detonation.
5.4.2009 20:17 JirkaK | skóre: 15 | blog:
Rozbalit Rozbalit vše Re: BASH - Zjisteni navratove hodnoty volaneho programu pri pouziti...
To zminene program "$promenna" jsem samozrejme zkousel (nez jsem objevil reseni pres xargs) - a nefungovalo to, jak melo. I kdyz jsem predal skriptu parametry v podobe s \" navic, vypsani parametru pres echo dopadlo dobre (s uvozovkami), ale pri spusteni se to chovalo, jako by tam zadne uvozovky nebyly :(
** Počítač bez window$, to je jako ryba bez bicyklu... ** echo 'Kdo neskáče, není Čech!'|sed s/Čech/cvičená\ opice/
20.4.2009 19:19 JirkaK | skóre: 15 | blog:
Rozbalit Rozbalit vše Vyreseno :)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kdyby nahodou nekdo na tohle vlakno v budoucnu narazil a resil podobny problem - tak muzu rict, ze jsem to nakonec vyresil (i kdyz pomerne "sverazne" a ne zrovna efektivne, pokud by se takto spoustenych prikazu bylo hodne): pro kazdou sadu parametru jsem prikaz + tyto parametry zapsal do docasneho souboru, ktery jsem pak ze skriptu spoustel a zjistoval jeho navratovou hodnotu... tzn.:

touch tmprun && chmod +x tmprun ... echo $prikaz $parametry > tmprun # tady by to mozna slo i nejakym elegantnejsim zpusobem, ale zadny me zrovna nenapada: navratova_hodnota = `./tmprun > /dev/null; echo $?`
** Počítač bez window$, to je jako ryba bez bicyklu... ** echo 'Kdo neskáče, není Čech!'|sed s/Čech/cvičená\ opice/

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.