Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: fotka 03. 12. 2014, 13:50:20

Název: Linux bash dotaz k proměnné
Přispěvatel: fotka 03. 12. 2014, 13:50:20
Dobrý den v tomto bash skript kód když definuji proměnnou vmrestartt, a hodnota té proměnné je komplexní skript (vzctl restart ...) který jako výstup má různé informace, znamená to, že definováním té proměnné bude skript korektně spuštěn, vykonán?

Kód: [Vybrat]
vmrestartt=$(vzctl restart $ctid)
if [[ "$vmrestartt" == *"exited with status 7"* ]];then
vzctl chkpnt $ctid --kill
sleep 10
vzctl --verbose restart $ctid
fi
Název: Re:Linux bash dotaz k proměnné
Přispěvatel: Dzavy 03. 12. 2014, 14:06:04
Boze to je zase prasarna. Proc nepouzit normalne $? ?

http://www.cyberciti.biz/faq/shell-how-to-determine-the-exit-status-of-linux-and-unix-command/
Název: Re:Linux bash dotaz k proměnné
Přispěvatel: fotka 03. 12. 2014, 14:10:44
já myslím že výstup toho vzctl skriptu nemá exit status 1 , otázka trvá..
Název: Re:Linux bash dotaz k proměnné
Přispěvatel: pet 03. 12. 2014, 14:12:52
1. řádek toho skriptu spustí "vzctl restart $ctid" a výstup uloží do "vmrestartt" jako text.
Název: Re:Linux bash dotaz k proměnné
Přispěvatel: poustevnik 03. 12. 2014, 14:13:20
Dobrý den v tomto bash skript kód když definuji proměnnou vmrestartt, a hodnota té proměnné je komplexní skript (vzctl restart ...) který jako výstup má různé informace, znamená to, že definováním té proměnné bude skript korektně spuštěn, vykonán?
ta řádka "vzctl restart..." není spuštěna "definováním té proměnné", ale díky konstrukci "$()", která spustí to, co je v závorkách a standardní výstup dá do té řádky (tedy v našem případě přiřadí do proměnné). googli "command substitution".
Název: Re:Linux bash dotaz k proměnné
Přispěvatel: Dzavy 03. 12. 2014, 14:14:04
já myslím že výstup toho vzctl skriptu nemá exit status 1 , otázka trvá..

Tak kdyz vypise, ze skoncil s exit kodem 7, tak by jeden cekal, ze v $? bude 7...
Název: Re:Linux bash dotaz k proměnné
Přispěvatel: fotka 03. 12. 2014, 14:16:17
děkuji, super  :)
Název: Re:Linux bash dotaz k proměnné
Přispěvatel: jrn 03. 12. 2014, 21:36:47
A nebo:

vzctl restart $ctid 2>&1 |grep "status 7" >/dev/null && (
  vzctl chkpnt $ctid --kill
  sleep 10
  vzctl --verbose restart $ctid
)

ne tak narocne na pamet (zpracovani radek po radku a bez subshellu a persistentni promenne) a hlavne jistota, ze se porovnava skutecne vystup. :) to clovek oceni, kdyz je kod vice zamotanej a dejou se divne veci :)

Obecne doporucuji porovnavat co nejkratsi obhajitelny text.  *hledam* muze byt obcas peknej macek.