Subject: bin/31252: which does not set an exit status
To: None <gnats-admin@netbsd.org, netbsd-bugs@netbsd.org>
From: None <stephane@sources.org>
List: netbsd-bugs
Date: 09/09/2005 07:57:51
>Number:         31252
>Category:       bin
>Synopsis:       /usr/bin/which does not set a proper exit status
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Sep 09 07:57:51 +0000 2005
>Originator:     Stephane Bortzmeyer
>Release:        NetBSD 2.0.1
>Organization:
	Sources
>Environment:
System: NetBSD preston 2.0.1 NetBSD 2.0.1 (GENERIC) #1: Thu Feb 3 23:32:19 CET 2005 stephane@preston:/usr/obj/sys/arch/sparc64/compile/GENERIC sparc64
Architecture: sparc64
Machine: sparc64
>Description:
        /usr/bin/which does not set an exit status, it always return zero. This 
        prevents from using which in shell scripts to see if a given command exists.
        Debian or FreeBSD does not have the problem, it seems specific to NetBSD.
        Note: again, I talk about /usr/bin/which not the built-in which in some 
        shells.

>How-To-Repeat:
       if /usr/bin/which doesnotexist > /dev/null 2>&1; then echo FOUND;  else echo NOT FOUND; fi  

       On Debian or FreeBSD, it displays (rightly) NOT FOUND but on NetBSD, it 
       displays FOUND.
>Fix:
--- which.csh.orig      2005-09-08 08:54:33.000000000 +0200
+++ which.csh   2005-09-08 08:54:41.000000000 +0200
@@ -77,5 +77,6 @@
     endif
     if ( ! $?found ) then
        echo no $arg in $path
+        exit 1
     endif
 end