From owner-freebsd-bugs@FreeBSD.ORG Mon Apr 27 02:20:02 2009 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EEEF5106564A for ; Mon, 27 Apr 2009 02:20:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id C1D398FC0C for ; Mon, 27 Apr 2009 02:20:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id n3R2K2Tu049922 for ; Mon, 27 Apr 2009 02:20:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id n3R2K2p4049921; Mon, 27 Apr 2009 02:20:02 GMT (envelope-from gnats) Date: Mon, 27 Apr 2009 02:20:02 GMT Message-Id: <200904270220.n3R2K2p4049921@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Garrett Cooper Cc: Subject: Re: bin/124748: [patch] sh(1): sh -c 'exit -1' fails with "Illegal number: -1", instead of exiting with a code of 255 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Garrett Cooper List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Apr 2009 02:20:03 -0000 The following reply was made to PR bin/124748; it has been noted by GNATS. From: Garrett Cooper To: Jilles Tjoelker Cc: bug-followup@freebsd.org Subject: Re: bin/124748: [patch] sh(1): sh -c 'exit -1' fails with "Illegal number: -1", instead of exiting with a code of 255 Date: Sun, 26 Apr 2009 18:46:43 -0700 On Sun, Apr 26, 2009 at 7:40 AM, Jilles Tjoelker wrote: > Do people actually use 'exit -1' instead of the clearer 'exit 255'? '-1' > is not an unsigned integer, so not a posix compliant parameter to the > exit special builtin. Even then, sh still aborts a script with a nonzero > exit code if exit is used wrongly like this. Some people do, but I've since then stopped doing this. The question I have is: - Is the value of the return code uint8_t? - Where in the documentation for sh(1) does it say that it can't be <0? Here are all of the relevant documentation items for exit codes I could find: Command Exit Status Each command has an exit status that can influence the behavior of other shell commands. The paradigm is that a command exits with zero for nor- mal or success, and non-zero for failure, error, or a false indication. The man page for each command should indicate the various exit codes and what they mean. Additionally, the built-in commands return exit codes, as does an executed shell function. If a command is terminated by a signal, its exit status is 128 plus the signal number. Signal numbers are defined in the header file . ---- exit [exitstatus] Terminate the shell process. If exitstatus is given it is used as the exit status of the shell; otherwise the exit status of the preceding command is used. ---- Nowhere in the above documentation does it mention valid limits being in the set, [0, 128+SIGRTMAX] => [0, 254]. It's merely implied by the resources at one's disposal (the source, sys/signal.h, etc). Thanks, -Garrett