Add FSH (set -o sh), initialize it if we're /bin/sh, and add the first use:
authordownsj <downsj@openbsd.org>
Thu, 2 Jan 1997 09:33:56 +0000 (09:33 +0000)
committerdownsj <downsj@openbsd.org>
Thu, 2 Jan 1997 09:33:56 +0000 (09:33 +0000)
don't set $_ if we're non-interactive.

bin/ksh/exec.c
bin/ksh/history.c
bin/ksh/main.c
bin/ksh/misc.c
bin/ksh/sh.h
bin/pdksh/exec.c
bin/pdksh/history.c
bin/pdksh/main.c
bin/pdksh/misc.c
bin/pdksh/sh.h

index 1502741..079ccc9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: exec.c,v 1.5 1996/11/21 07:59:28 downsj Exp $ */
+/*     $OpenBSD: exec.c,v 1.6 1997/01/02 09:33:56 downsj Exp $ */
 
 /*
  * execute command tree
@@ -457,13 +457,14 @@ comexec(t, tp, ap, flags)
        int type_flags;
        int keepasn_ok;
        int fcflags = FC_BI|FC_FUNC|FC_PATH;
+       volatile int underscore = (!Flag(FSH) || Flag(FTALKING));
 
        /* snag the last argument for $_ XXX not the same as at&t ksh,
         * which only seems to set $_ after a newline (but not in
         * functions/dot scripts, but in interactive and scipt) -
         * perhaps save last arg here and set it in shell()?.
         */
-       if (*(lastp = ap)) {
+       if (underscore && *(lastp = ap)) {
                while (*++lastp)
                        ;
                setstr(typeset("_", LOCAL, 0, 0, 0), *--lastp);
@@ -698,8 +699,10 @@ comexec(t, tp, ap, flags)
                        break;
                }
 
-               /* set $_ to program's full path */
-               setstr(typeset("_", LOCAL|EXPORT, 0, 0, 0), tp->val.s);
+               if (underscore) {
+                       /* set $_ to program's full path */
+                       setstr(typeset("_", LOCAL|EXPORT, 0, 0, 0), tp->val.s);
+               }
 
                if (flags&XEXEC) {
                        j_exit();
index 0ed6ee7..f29e7e7 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: history.c,v 1.2 1996/12/29 12:24:05 graichen Exp $    */
+/*     $OpenBSD: history.c,v 1.3 1997/01/02 09:34:00 downsj Exp $      */
 
 /*
  * command history
@@ -242,7 +242,8 @@ c_fc(wp)
                return 1;
        }
 
-       setstr(local("_", FALSE), tf->name);
+       if (!Flag(FSH) || Flag(FTALKING))
+               setstr(local("_", FALSE), tf->name);
 
        /* XXX: source should not get trashed by this.. */
        {
index e8425e1..a6bd936 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: main.c,v 1.4 1996/11/21 07:59:33 downsj Exp $ */
+/*     $OpenBSD: main.c,v 1.5 1997/01/02 09:34:03 downsj Exp $ */
 
 /*
  * startup, main loop, enviroments and error handling
@@ -197,6 +197,11 @@ main(argc, argv)
        change_flag(FPOSIX, OF_SPECIAL, 1);
 #endif /* POSIXLY_CORRECT */
 
+       /* Check to see if we're /bin/sh. */
+       if (!strcmp(&kshname[strlen(kshname) - 3], "/sh")
+           || !strcmp(kshname, "sh") || !strcmp(kshname, "-sh"))
+               Flag(FSH) = 1;
+
        /* import enviroment */
        if (environ != NULL)
                for (wp = environ; *wp != NULL; wp++)
index 5108389..0d5fe74 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: misc.c,v 1.3 1996/12/22 02:57:49 tholo Exp $  */
+/*     $OpenBSD: misc.c,v 1.4 1997/01/02 09:34:07 downsj Exp $ */
 
 /*
  * Miscellaneous functions
@@ -161,6 +161,7 @@ const struct option options[] = {
        { "posix",        0,            OF_ANY }, /* non-standard */
        { "privileged", 'p',            OF_ANY },
        { "restricted", 'r',        OF_CMDLINE },
+       { "sh",           0,            OF_ANY }, /* non-standard */
        { "stdin",      's',        OF_CMDLINE }, /* pseudo non-standard */
        { "trackall",   'h',            OF_ANY },
        { "verbose",    'v',            OF_ANY },
index 9ae4ffb..588abd2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sh.h,v 1.4 1996/12/18 18:28:37 niklas Exp $   */
+/*     $OpenBSD: sh.h,v 1.5 1997/01/02 09:34:10 downsj Exp $   */
 
 /*
  * Public Domain Bourne/Korn shell
@@ -472,6 +472,7 @@ enum sh_flag {
        FPOSIX,         /* -o posix: be posixly correct */
        FPRIVILEGED,    /* -p: use suid_profile */
        FRESTRICTED,    /* -r: restricted shell */
+       FSH,            /* -o sh: favor sh behavour */
        FSTDIN,         /* -s: (invocation) parse stdin */
        FTRACKALL,      /* -h: create tracked aliases for all commands */
        FVERBOSE,       /* -v: echo input */
index 1502741..079ccc9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: exec.c,v 1.5 1996/11/21 07:59:28 downsj Exp $ */
+/*     $OpenBSD: exec.c,v 1.6 1997/01/02 09:33:56 downsj Exp $ */
 
 /*
  * execute command tree
@@ -457,13 +457,14 @@ comexec(t, tp, ap, flags)
        int type_flags;
        int keepasn_ok;
        int fcflags = FC_BI|FC_FUNC|FC_PATH;
+       volatile int underscore = (!Flag(FSH) || Flag(FTALKING));
 
        /* snag the last argument for $_ XXX not the same as at&t ksh,
         * which only seems to set $_ after a newline (but not in
         * functions/dot scripts, but in interactive and scipt) -
         * perhaps save last arg here and set it in shell()?.
         */
-       if (*(lastp = ap)) {
+       if (underscore && *(lastp = ap)) {
                while (*++lastp)
                        ;
                setstr(typeset("_", LOCAL, 0, 0, 0), *--lastp);
@@ -698,8 +699,10 @@ comexec(t, tp, ap, flags)
                        break;
                }
 
-               /* set $_ to program's full path */
-               setstr(typeset("_", LOCAL|EXPORT, 0, 0, 0), tp->val.s);
+               if (underscore) {
+                       /* set $_ to program's full path */
+                       setstr(typeset("_", LOCAL|EXPORT, 0, 0, 0), tp->val.s);
+               }
 
                if (flags&XEXEC) {
                        j_exit();
index 0ed6ee7..f29e7e7 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: history.c,v 1.2 1996/12/29 12:24:05 graichen Exp $    */
+/*     $OpenBSD: history.c,v 1.3 1997/01/02 09:34:00 downsj Exp $      */
 
 /*
  * command history
@@ -242,7 +242,8 @@ c_fc(wp)
                return 1;
        }
 
-       setstr(local("_", FALSE), tf->name);
+       if (!Flag(FSH) || Flag(FTALKING))
+               setstr(local("_", FALSE), tf->name);
 
        /* XXX: source should not get trashed by this.. */
        {
index e8425e1..a6bd936 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: main.c,v 1.4 1996/11/21 07:59:33 downsj Exp $ */
+/*     $OpenBSD: main.c,v 1.5 1997/01/02 09:34:03 downsj Exp $ */
 
 /*
  * startup, main loop, enviroments and error handling
@@ -197,6 +197,11 @@ main(argc, argv)
        change_flag(FPOSIX, OF_SPECIAL, 1);
 #endif /* POSIXLY_CORRECT */
 
+       /* Check to see if we're /bin/sh. */
+       if (!strcmp(&kshname[strlen(kshname) - 3], "/sh")
+           || !strcmp(kshname, "sh") || !strcmp(kshname, "-sh"))
+               Flag(FSH) = 1;
+
        /* import enviroment */
        if (environ != NULL)
                for (wp = environ; *wp != NULL; wp++)
index 5108389..0d5fe74 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: misc.c,v 1.3 1996/12/22 02:57:49 tholo Exp $  */
+/*     $OpenBSD: misc.c,v 1.4 1997/01/02 09:34:07 downsj Exp $ */
 
 /*
  * Miscellaneous functions
@@ -161,6 +161,7 @@ const struct option options[] = {
        { "posix",        0,            OF_ANY }, /* non-standard */
        { "privileged", 'p',            OF_ANY },
        { "restricted", 'r',        OF_CMDLINE },
+       { "sh",           0,            OF_ANY }, /* non-standard */
        { "stdin",      's',        OF_CMDLINE }, /* pseudo non-standard */
        { "trackall",   'h',            OF_ANY },
        { "verbose",    'v',            OF_ANY },
index 9ae4ffb..588abd2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sh.h,v 1.4 1996/12/18 18:28:37 niklas Exp $   */
+/*     $OpenBSD: sh.h,v 1.5 1997/01/02 09:34:10 downsj Exp $   */
 
 /*
  * Public Domain Bourne/Korn shell
@@ -472,6 +472,7 @@ enum sh_flag {
        FPOSIX,         /* -o posix: be posixly correct */
        FPRIVILEGED,    /* -p: use suid_profile */
        FRESTRICTED,    /* -r: restricted shell */
+       FSH,            /* -o sh: favor sh behavour */
        FSTDIN,         /* -s: (invocation) parse stdin */
        FTRACKALL,      /* -h: create tracked aliases for all commands */
        FVERBOSE,       /* -v: echo input */