A return without an exit status in a sh functino sets the exit status to true. bash works as does /bin/sh on FreeBSD 2.1.0-RELEASE Fix: use bash? How-To-Repeat: When the following script is run it echos "True Condition". #!/bin/sh Tester() { false return } if Tester then echo "True Condition" else echo "Not True Condition" fi
On Sun, 13 Oct 1996 george@cia-g.com wrote: # # >Number: 1793 # >Category: bin # >Synopsis: /bin/sh return w/o exitstatus in a function sets exitstatus to true # >Confidential: no # >Severity: non-critical # >Priority: low # >Responsible: freebsd-bugs # >State: open # >Class: sw-bug # >Submitter-Id: current-users # >Arrival-Date: Sun Oct 13 20:10:01 PDT 1996 # >Last-Modified: # >Originator: George Simunovich # >Organization: # >Release: 2.2-current # >Environment: # 2.2-CURRENT FreeBSD 2.2-CURRENT #0: Sat Oct 12 13:26:46 MDT 1996 # >Description: # A return without an exit status in a sh functino sets the exit status # to true. # # bash works as does /bin/sh on FreeBSD 2.1.0-RELEASE # >How-To-Repeat: # When the following script is run it echos "True Condition". # # #!/bin/sh # # Tester() # { # false # return # } # # if Tester # then # echo "True Condition" # else # echo "Not True Condition" # fi # # >Fix: # use bash? # # >Audit-Trail: # >Unformatted: # Try doing a 'return $?' to return the exitstatus of the previously executed command. Attached is a one-liner that fixes the case above but breaks this new case (at least wrt /bin/bash). steve[~]$ cat > testing tester() { return } false if tester then echo "true" else echo "false" fi ^D steve[~] /tmp/sh testing true steve[~] /bin/bash testing false steve[~] I will look into this some more and see what I can find. Steve Index: eval.c =================================================================== RCS file: /home/ncvs/src/bin/sh/eval.c,v retrieving revision 1.6 diff -u -r1.6 eval.c --- eval.c 1996/10/06 15:17:19 1.6 +++ eval.c 1996/10/14 05:02:36 @@ -958,7 +958,7 @@ { int ret; - ret = exitstatus; + ret = oexitstatus; if (argc > 1) ret = number(argv[1]); if (funcnest) {
Responsible Changed From-To: freebsd-bugs->steve I am working on this one.
Responsible Changed From-To: steve->cracauer Martin said he would take this one.
State Changed From-To: open->closed This has been fixed when NetBSD changes were imported by Steve in Dec 1996