Author: jilles
Date: Sat Mar 13 22:53:17 2010
New Revision: 205138
URL: http://svn.freebsd.org/changeset/base/205138

Log:
  sh: Do not abort on a redirection error if there is no command word.
  
  Although simple commands without a command word (only assignments and/or
  redirections) are much like special builtins, POSIX and most shells seem to
  agree that redirection errors should not abort the shell in this case. Of
  course, the assignments persist and assignment errors are fatal.
  
  To get the old behaviour portably, use the ':' special builtin.
  To get the new behaviour portably, given that there are no assignments, use
  the 'true' regular builtin.

Added:
  head/tools/regression/bin/sh/errors/redirection-error4.0   (contents, props 
changed)
Modified:
  head/bin/sh/eval.c

Modified: head/bin/sh/eval.c
==============================================================================
--- head/bin/sh/eval.c  Sat Mar 13 22:37:07 2010        (r205137)
+++ head/bin/sh/eval.c  Sat Mar 13 22:53:17 2010        (r205138)
@@ -680,7 +680,7 @@ evalcommand(union node *cmd, int flags, 
                /* Variable assignment(s) without command */
                cmdentry.cmdtype = CMDBUILTIN;
                cmdentry.u.index = BLTINCMD;
-               cmdentry.special = 1;
+               cmdentry.special = 0;
        } else {
                static const char PATH[] = "PATH=";
                int cmd_flags = 0, bltinonly = 0;
@@ -891,6 +891,12 @@ evalcommand(union node *cmd, int flags, 
                }
                handler = &jmploc;
                redirect(cmd->ncmd.redirect, mode);
+               /*
+                * If there is no command word, redirection errors should
+                * not be fatal but assignment errors should.
+                */
+               if (argc == 0 && !(flags & EV_BACKCMD))
+                       cmdentry.special = 1;
                if (cmdentry.special)
                        listsetvar(cmdenviron);
                commandname = argv[0];

Added: head/tools/regression/bin/sh/errors/redirection-error4.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/tools/regression/bin/sh/errors/redirection-error4.0    Sat Mar 13 
22:53:17 2010        (r205138)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+# A redirection error should not abort the shell if there is no command word.
+exec 2>/dev/null
+</var/empty/x
+</var/empty/x y=2
+y=2 </var/empty/x
+exit 0
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to