From 94e87bc83d81e1226224e39c50b4eea8384bbdcf Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Thu, 14 Feb 2008 16:51:58 +0000 Subject: ash: explain why "set -o BOGUS" doesn't abort --- shell/ash.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'shell/ash.c') diff --git a/shell/ash.c b/shell/ash.c index 612172043..10eb90d30 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -9075,6 +9075,23 @@ setparam(char **argv) /* * Process shell options. The global variable argptr contains a pointer * to the argument list; we advance it past the options. + * + * SUSv3 section 2.8.1 "Consequences of Shell Errors" says: + * For a non-interactive shell, an error condition encountered + * by a special built-in ... shall cause the shell to write a diagnostic message + * to standard error and exit as shown in the following table: + * Error Special Built-In + * ... + * Utility syntax error (option or operand error) Shall exit + * ... + * However, in bug 1142 (http://busybox.net/bugs/view.php?id=1142) + * we see that bash does not do that (set "finishes" with error code 1 instead, + * and shell continues), and people rely on this behavior! + * Testcase: + * set -o barfoo 2>/dev/null + * echo $? + * + * Oh well. Let's mimic that. */ static int minus_o(char *name, int val) -- cgit v1.2.3