Portál AbcLinuxu, 19. dubna 2024 03:43


Dotaz: Příkaz nenalezen - blok neskončí chybou?

Nuphar avatar 9.5.2015 16:39 Nuphar | skóre: 18
Příkaz nenalezen - blok neskončí chybou?
Přečteno: 134×
Odpovědět | Admin

Ahoj,
mám úsek BASH skriptu, který vypadá zhruba takto:

{
 prikaz1
 prikaz2
 ...
 prikaz_neni
 ...
 prikazX
 } || echo "Blok XY skončil chybou!"

Pokud se v něm cokoliv nepovede, chci uživateli vypsat chybovou hlášku.

Ale chová se to tak, že i když nějaký příkaz v bloku neexistuje (bash: command prikaz_neni not found), nevyvolá to skončení celého bloku s chybou a to echo neproběhne. Blok vypadá jako by proběhl v pořádku.

Jak dosáhnout popsaného chtěného chování?

Per aspera, Asparagus et Aspergillus ad a/Astra!

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Fuky avatar 9.5.2015 17:25 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Příkaz nenalezen - blok neskončí chybou?
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/bash

(
    set -e

    true
    false
    true
)

if [ $? -ne 0 ]; then
    echo "Blok XY skloncil s chybou."
fi

BTW: Doporučuji zvážit možnost použít Python.

-- RÁMO: psí tábor , ETriatlon: Výuka plavání
Řešení 1× (Nuphar (tazatel))
Fuky avatar 9.5.2015 17:26 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Příkaz nenalezen - blok neskončí chybou?
Nuphar avatar 10.5.2015 09:13 Nuphar | skóre: 18
Rozbalit Rozbalit vše Re: Příkaz nenalezen - blok neskončí chybou?
Děkuji, zvláště hláška "Bash doesn't have all luxury as you can find in many programming language and also it's true that bash doesn't have less luxury than other programming language." to dost vysvětluje. :-)
Per aspera, Asparagus et Aspergillus ad a/Astra!
Řešení 1× (Nuphar (tazatel))
9.5.2015 17:42 Petr Gajdůšek | skóre: 13 | blog: Úlomky | Znojmo
Rozbalit Rozbalit vše Re: Příkaz nenalezen - blok neskončí chybou?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vrácená hodnota seznamu je exit status posledního provedeného příkazu v něm. Takže musíš zajistit, že po chybě už nebude proveden další příkaz v seznamu, třeba takhle:

třeba takhle
{
        true &&
        true &&
        false &&
        echo 'OK'
} || echo "Blok XY skončil chybou!"
nebo seznam spustit v podshellu (nebo rovnou v jiném souboru) a využít set -e
(
        set -e
        true
        true
        false
        echo 'OK'
)

[ $? -ne 0 ] && echo "Blok XY skončil chybou!"
Nuphar avatar 10.5.2015 09:14 Nuphar | skóre: 18
Rozbalit Rozbalit vše Re: Příkaz nenalezen - blok neskončí chybou?
Moc děkuji, zvláště první řešení je velmi jednoduché, to je přesně ono. :-)
Per aspera, Asparagus et Aspergillus ad a/Astra!

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.