weinelt@sbsvax.cs.uni-sb.de (Bernhard Weinelt) (02/20/90)
Hello out there, I have a problem using /bin/sh: if I set the option -e (stop execution if a command fails) I can't use any if's, since writing if /bin/test [condition] then [commands1] else [commands2] fi never executes [commands2]. If the condition is true [commands1] are executed, but if the condition is false, /bin/test returns a value <> 0 and so the sh stops execution. [Sorry, but test is not a builtin in /bin/sh on our VAX's running ULTRIX and BSD4.3. In fact, in /bin/sh on our Suns, it is] Any help? Thanks in advance! Bernhard -- ------------------------------------ __________________ | Bernhard Weinelt | (__) / \ | Universitaet des Saarlandes | (oo) ( Many Greetings ) | FB 10 - Informatik (Dept. of CS) | /-------\/ --'\__________________/ | Bau 36, Im Stadtwald 15 | / | || | D-6600 Saarbruecken 11, W-Germany| * ||----|| | weinelt@cs.uni-sb.de | ~~ ~~ ------------------------------------
chris@mimsy.umd.edu (Chris Torek) (02/20/90)
In article <2903@sbsvax.cs.uni-sb.de> weinelt@sbsvax.cs.uni-sb.de (Bernhard Weinelt) writes: >if I set the option -e (stop execution if a command fails) I >can't use any if's .... You have a copy of the Buggy Bourne Shell (tm), as distributed with 4.2 and 4.3 BSD and probably several other systems. It can be identified by running $ set -e $ if false; then echo gak; else echo ok; fi and noting that the shell exits instead of printing `ok', and by $ set -e $ false || echo ok which also exits (and should not), and by $ set -e $ while false; do :; done To fix it, (1) get the source (2) change it in the obvious 3 places in xec.c. You will have to learn Bournegol. Another alternative is to replace /bin/sh with one of the free sh lookalikes, provided you can find one that is enough alike. As a work-around, you can `set +e' around all the tests that might fail. -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@cs.umd.edu Path: uunet!mimsy!chris