Bash Error Chain Construct

basOS G noxelia at gmail.com
Sun Jun 22 13:25:06 EEST 2008


2008/6/20 Giorgos Keramidas <keramida at ceid.upatras.gr>:

> On Fri, 20 Jun 2008 14:20:57 +0300, Σπύρος Γεωργαράς <sng at hellug.gr>
> wrote:
> > O/H basOS G έγραψε:
> > | Εστω οτι ειμαστε μεσα σε ενα bash σκριπτ
> > | Εαν μια εντολη που *πρεπει*  να εκτελεστει αποτύχει τι μπορούμε να
> κανουμε
> > |
> > | ΤΟ παρακατω δεν δουλευει γιατι οι παρενθέσεις ανοίγουν κάποιο subshell.
> > | must_exec || ( echo "Fatal Error" && exit 1)
> > |
> > | Το πατακατω δε δουλεύει γιατι γινεται evaluated ως (must_exec || echo
> > | "Error") && exit 1 οπότε παντα βγαίνει
> > | must_exec || echo "Fatal Error" && exit 1
> > |
> > | Καποια πρόταση εκτος απο το
> > | if ! must_exec ; then; echo "Fatal Error" ; exit 1 ;fi
> > | υπαρχει ? Μπορούμε να κανουμε κατι για να δουλεψει με τις παρενθέσεις ;
> >
> > Δοκίμασε αυτό
> >
> > must_exec || {
> >       echo "Fatal Error"
> >       exit 1
> > }
>


>
>
Thanks mans !

>
> Ακριβώς.  Και μετά, όπως έγραψα και στο άλλο post, ξέχνα το εντελώς,
> πριν μπεις στον πειρασμό να γράφεις κώδικα με δομές όπως:
>
>    cmd1 && {
>        cmd2 || cmd3 || {
>            cmd4 && {
>                cmd5
>            }
>        }
>        cmd6 || {
>            cmd7 && cmd8 || {
>                cmd9
>            }
>        }
>    }
>
> Το ξέρω πως αυτό είναι `reductio ad absurdum'[1], και πιθανόν να μην
> έχει ούτε ο Βάσος, ούτε κανείς άλλος σκοπό να καταλήξει έτσι ο κώδικάς
> του.


 Γιατι να μην καταλληξουμε σε ενα συνδυασμο ; Σαφως if ;then ;elseif; if ;
else ;if .... για κατι που εχει πανω απο δυο καταστασεις ή είναι μερος του
program logic. Αλλα στην περιπτωση μου λει το script :
--
mkdir /fooks
cp /tmp/skat /fooks/
---
εαν γραφαμε
--
 mkdir /fooks || { echo "cannot create /fooks" && exit ;}
--
ειναι ενα πολυ απλο και χρήσιμο assert . Αλλο παραδειγμα στην php, perl
exoume to
---
kane_kati() or die("Den mporw");
--
Αυτη η συνταξη δινει εμφαση στην εντολη και στην "κανονικη" κατασταση και
οχι στην περιπτωση σφαλματος (αντι πχ):
---
if (kane_kati()) {
     echo  "den mporw";
     exit();
}
---

Κατα τα αλλα συμφωνω οτι μπορει να κανει το script σου αδιαβαστο.

>
>
> [1] http://en.wikipedia.org/wiki/Reductio_ad_absurdum
>
> Το κόλπο με τις αγκύλες παίζει, αλλά η δική μου άποψη είναι ότι είναι
> καλύτερα να το αποφεύγει ο κόσμος.  Ενθαρρύνει τον shell programmer να
> γράψει περίπλοκες, δυσνόητες δομές από shaghetti-logic, τις οποίες μετά
> από καμιά βδομάδα δε θα μπορεί να διαβάσει ΟΥΤΕ ο ίδιος.
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.hellug.gr/pipermail/linux-greek-users/attachments/20080622/1be5a914/attachment.htm>


More information about the Linux-greek-users mailing list