• Allow setting both -o posix and -o sh (although only in the same
command; setting one still unsets the other at first) • Change subst_exstat to be conformant unless -o sh is set and -o posix isn’t • In lksh, make subst_exstat (newly) conformant if -o posix • New MKSH_BINSHPOSIX to accompany MKSH_BINSHREDUCED • Sync lksh manpage precisely
This commit is contained in:
parent
f2906c79df
commit
f0f34eb7b6
9
Build.sh
9
Build.sh
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.628 2013/04/27 18:12:37 tg Exp $'
|
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.629 2013/05/02 20:21:36 tg Exp $'
|
||||||
#-
|
#-
|
||||||
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||||
# 2011, 2012, 2013
|
# 2011, 2012, 2013
|
||||||
@ -1367,8 +1367,8 @@ if ac_ifcpp 'ifdef MKSH_SMALL' isset_MKSH_SMALL '' \
|
|||||||
check_categories="$check_categories smksh"
|
check_categories="$check_categories smksh"
|
||||||
HAVE_ISSET_MKSH_CONSERVATIVE_FDS=1 # from sh.h
|
HAVE_ISSET_MKSH_CONSERVATIVE_FDS=1 # from sh.h
|
||||||
fi
|
fi
|
||||||
ac_ifcpp 'ifdef MKSH_BINSHREDUCED' isset_MKSH_BINSHREDUCED '' \
|
ac_ifcpp 'if defined(MKSH_BINSHPOSIX) || defined(MKSH_BINSHREDUCED)' \
|
||||||
"if a reduced-feature sh is requested" && \
|
isset_MKSH_BINSH '' 'if invoking as sh should be handled specially' && \
|
||||||
check_categories="$check_categories binsh"
|
check_categories="$check_categories binsh"
|
||||||
ac_ifcpp 'ifdef MKSH_UNEMPLOYED' isset_MKSH_UNEMPLOYED '' \
|
ac_ifcpp 'ifdef MKSH_UNEMPLOYED' isset_MKSH_UNEMPLOYED '' \
|
||||||
"if mksh will be built without job control" && \
|
"if mksh will be built without job control" && \
|
||||||
@ -1531,7 +1531,7 @@ else
|
|||||||
#define EXTERN
|
#define EXTERN
|
||||||
#define MKSH_INCLUDES_ONLY
|
#define MKSH_INCLUDES_ONLY
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
__RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.628 2013/04/27 18:12:37 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.629 2013/05/02 20:21:36 tg Exp $");
|
||||||
int main(void) { printf("Hello, World!\n"); return (0); }
|
int main(void) { printf("Hello, World!\n"); return (0); }
|
||||||
EOF
|
EOF
|
||||||
case $cm in
|
case $cm in
|
||||||
@ -2315,6 +2315,7 @@ DEBUG_LEAKS enable freeing resources before exiting
|
|||||||
MKSHRC_PATH "~/.mkshrc" (do not change)
|
MKSHRC_PATH "~/.mkshrc" (do not change)
|
||||||
MKSH_A4PB force use of arc4random_pushb
|
MKSH_A4PB force use of arc4random_pushb
|
||||||
MKSH_ASSUME_UTF8 (0=disabled, 1=enabled; default: unset)
|
MKSH_ASSUME_UTF8 (0=disabled, 1=enabled; default: unset)
|
||||||
|
MKSH_BINSHPOSIX if */sh or */-sh, enable set -o posix
|
||||||
MKSH_BINSHREDUCED if */sh or */-sh, enable set -o sh
|
MKSH_BINSHREDUCED if */sh or */-sh, enable set -o sh
|
||||||
MKSH_CLRTOEOL_STRING "\033[K"
|
MKSH_CLRTOEOL_STRING "\033[K"
|
||||||
MKSH_CLS_STRING "\033[;H\033[J"
|
MKSH_CLS_STRING "\033[;H\033[J"
|
||||||
|
24
check.t
24
check.t
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/check.t,v 1.609 2013/04/27 19:16:23 tg Exp $
|
# $MirOS: src/bin/mksh/check.t,v 1.610 2013/05/02 20:21:38 tg Exp $
|
||||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||||
@ -4254,7 +4254,7 @@ description:
|
|||||||
should print 0 according to POSIX (dash, bash, ksh93, posh)
|
should print 0 according to POSIX (dash, bash, ksh93, posh)
|
||||||
but not 0 according to the getopt(1) manual page, ksh88, and
|
but not 0 according to the getopt(1) manual page, ksh88, and
|
||||||
Bourne sh (such as /bin/sh on Solaris).
|
Bourne sh (such as /bin/sh on Solaris).
|
||||||
In mksh R39b, we honour POSIX except when -o sh is set.
|
We honour POSIX except when -o sh is set.
|
||||||
category: shell:legacy-no
|
category: shell:legacy-no
|
||||||
stdin:
|
stdin:
|
||||||
showf() {
|
showf() {
|
||||||
@ -4274,10 +4274,15 @@ stdin:
|
|||||||
showf
|
showf
|
||||||
set -- `false`
|
set -- `false`
|
||||||
echo rv=$?
|
echo rv=$?
|
||||||
|
set -o posix -o sh
|
||||||
|
showf
|
||||||
|
set -- `false`
|
||||||
|
echo rv=$?
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
FPOSIX=0 FSH=0 rv=0
|
FPOSIX=0 FSH=0 rv=0
|
||||||
FPOSIX=0 FSH=1 rv=1
|
FPOSIX=0 FSH=1 rv=1
|
||||||
FPOSIX=1 FSH=0 rv=0
|
FPOSIX=1 FSH=0 rv=0
|
||||||
|
FPOSIX=1 FSH=1 rv=0
|
||||||
---
|
---
|
||||||
name: regression-10-legacy
|
name: regression-10-legacy
|
||||||
description:
|
description:
|
||||||
@ -4306,10 +4311,15 @@ stdin:
|
|||||||
showf
|
showf
|
||||||
set -- `false`
|
set -- `false`
|
||||||
echo rv=$?
|
echo rv=$?
|
||||||
|
set -o posix -o sh
|
||||||
|
showf
|
||||||
|
set -- `false`
|
||||||
|
echo rv=$?
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
FPOSIX=0 FSH=0 rv=1
|
FPOSIX=0 FSH=0 rv=1
|
||||||
FPOSIX=0 FSH=1 rv=1
|
FPOSIX=0 FSH=1 rv=1
|
||||||
FPOSIX=1 FSH=0 rv=1
|
FPOSIX=1 FSH=0 rv=0
|
||||||
|
FPOSIX=1 FSH=1 rv=0
|
||||||
---
|
---
|
||||||
name: regression-11
|
name: regression-11
|
||||||
description:
|
description:
|
||||||
@ -6187,7 +6197,7 @@ expected-stdout:
|
|||||||
---
|
---
|
||||||
name: sh-mode-2a
|
name: sh-mode-2a
|
||||||
description:
|
description:
|
||||||
Check that sh mode is *not* automatically turned on
|
Check that posix or sh mode is *not* automatically turned on
|
||||||
category: !binsh
|
category: !binsh
|
||||||
stdin:
|
stdin:
|
||||||
ln -s "$__progname" ksh || cp "$__progname" ksh
|
ln -s "$__progname" ksh || cp "$__progname" ksh
|
||||||
@ -6196,7 +6206,7 @@ stdin:
|
|||||||
ln -s "$__progname" ./-sh || cp "$__progname" ./-sh
|
ln -s "$__progname" ./-sh || cp "$__progname" ./-sh
|
||||||
for shell in {,-}{,k}sh; do
|
for shell in {,-}{,k}sh; do
|
||||||
print -- $shell $(./$shell +l -c \
|
print -- $shell $(./$shell +l -c \
|
||||||
'[[ $(set +o) == *@(-o sh)@(| *) ]] && echo sh || echo nosh')
|
'[[ $(set +o) == *"-o "@(sh|posix)@(| *) ]] && echo sh || echo nosh')
|
||||||
done
|
done
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
sh nosh
|
sh nosh
|
||||||
@ -6206,7 +6216,7 @@ expected-stdout:
|
|||||||
---
|
---
|
||||||
name: sh-mode-2b
|
name: sh-mode-2b
|
||||||
description:
|
description:
|
||||||
Check that sh mode *is* automatically turned on
|
Check that posix or sh mode *is* automatically turned on
|
||||||
category: binsh
|
category: binsh
|
||||||
stdin:
|
stdin:
|
||||||
ln -s "$__progname" ksh || cp "$__progname" ksh
|
ln -s "$__progname" ksh || cp "$__progname" ksh
|
||||||
@ -6215,7 +6225,7 @@ stdin:
|
|||||||
ln -s "$__progname" ./-sh || cp "$__progname" ./-sh
|
ln -s "$__progname" ./-sh || cp "$__progname" ./-sh
|
||||||
for shell in {,-}{,k}sh; do
|
for shell in {,-}{,k}sh; do
|
||||||
print -- $shell $(./$shell +l -c \
|
print -- $shell $(./$shell +l -c \
|
||||||
'[[ $(set +o) == *@(-o sh)@(| *) ]] && echo sh || echo nosh')
|
'[[ $(set +o) == *"-o "@(sh|posix)@(| *) ]] && echo sh || echo nosh')
|
||||||
done
|
done
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
sh sh
|
sh sh
|
||||||
|
9
funcs.c
9
funcs.c
@ -38,7 +38,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.242 2013/04/26 21:22:45 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.243 2013/05/02 20:21:41 tg Exp $");
|
||||||
|
|
||||||
#if HAVE_KILLPG
|
#if HAVE_KILLPG
|
||||||
/*
|
/*
|
||||||
@ -2426,12 +2426,13 @@ c_set(const char **wp)
|
|||||||
* which assumes the exit value set will be that of the $()
|
* which assumes the exit value set will be that of the $()
|
||||||
* (subst_exstat is cleared in execute() so that it will be 0
|
* (subst_exstat is cleared in execute() so that it will be 0
|
||||||
* if there are no command substitutions).
|
* if there are no command substitutions).
|
||||||
* Switched ksh (!posix !sh) to POSIX in mksh R39b.
|
|
||||||
*/
|
*/
|
||||||
#ifdef MKSH_LEGACY_MODE
|
#ifdef MKSH_LEGACY_MODE
|
||||||
return (subst_exstat);
|
/* traditional behaviour, unless set -o posix */
|
||||||
|
return (Flag(FPOSIX) ? 0 : subst_exstat);
|
||||||
#else
|
#else
|
||||||
return (Flag(FSH) ? subst_exstat : 0);
|
/* conformant behaviour, unless set -o sh +o posix */
|
||||||
|
return (Flag(FSH) && !Flag(FPOSIX) ? subst_exstat : 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
71
lksh.1
71
lksh.1
@ -1,4 +1,4 @@
|
|||||||
.\" $MirOS: src/bin/mksh/lksh.1,v 1.3 2013/04/27 19:16:25 tg Exp $
|
.\" $MirOS: src/bin/mksh/lksh.1,v 1.4 2013/05/02 20:21:43 tg Exp $
|
||||||
.\"-
|
.\"-
|
||||||
.\" Copyright (c) 2008, 2009, 2010, 2012, 2013
|
.\" Copyright (c) 2008, 2009, 2010, 2012, 2013
|
||||||
.\" Thorsten “mirabilos” Glaser <tg@mirbsd.org>
|
.\" Thorsten “mirabilos” Glaser <tg@mirbsd.org>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
.\" with -mandoc, it might implement .Mx itself, but we want to
|
.\" with -mandoc, it might implement .Mx itself, but we want to
|
||||||
.\" use our own definition. And .Dd must come *first*, always.
|
.\" use our own definition. And .Dd must come *first*, always.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: April 27 2013 $
|
.Dd $Mdocdate: May 2 2013 $
|
||||||
.\"
|
.\"
|
||||||
.\" Check which macro package we use, and do other -mdoc setup.
|
.\" Check which macro package we use, and do other -mdoc setup.
|
||||||
.\"
|
.\"
|
||||||
@ -184,7 +184,7 @@ is not suitable for use as
|
|||||||
.Pa /bin/sh .
|
.Pa /bin/sh .
|
||||||
.It
|
.It
|
||||||
There is no explicit support for interactive use,
|
There is no explicit support for interactive use,
|
||||||
nor any command line editing code.
|
nor any command line editing or history code.
|
||||||
Hence,
|
Hence,
|
||||||
.Nm
|
.Nm
|
||||||
is not suitable as a user's login shell, either; use
|
is not suitable as a user's login shell, either; use
|
||||||
@ -200,19 +200,43 @@ as
|
|||||||
instead of
|
instead of
|
||||||
.Dq MIRBSD KSH .
|
.Dq MIRBSD KSH .
|
||||||
.It
|
.It
|
||||||
Some
|
.Nm
|
||||||
.Nm mksh
|
only offers the traditional ten file descriptors to scripts.
|
||||||
specific extensions are missing; specifically, the
|
|
||||||
.Fl T
|
|
||||||
command-line option.
|
|
||||||
.It
|
.It
|
||||||
Some extensions from other shells, such as
|
.Nm
|
||||||
|
uses
|
||||||
|
.Tn POSIX
|
||||||
|
arithmetics, which has quite a few implications:
|
||||||
|
The data type for arithmetics is the host ISO C
|
||||||
|
.Vt long
|
||||||
|
data type.
|
||||||
|
Signed integer wraparound is Undefined Behaviour.
|
||||||
|
The sign of the result of a modulo operation with at least one
|
||||||
|
negative operand is unspecified.
|
||||||
|
Shift operations on negative numbers are unspecified.
|
||||||
|
Division of the largest negative number by \-1 is Undefined Behaviour.
|
||||||
|
The compiler is permitted to delete all data and crash the system
|
||||||
|
if Undefined Behaviour occurs.
|
||||||
|
.It
|
||||||
|
The rotation arithmetic operators are not available.
|
||||||
|
.It
|
||||||
|
The shift arithmetic operators take all bits of the second operand into
|
||||||
|
account; if they exceed permitted precision, the result is unspecified.
|
||||||
|
.It
|
||||||
|
The
|
||||||
.Tn GNU
|
.Tn GNU
|
||||||
.Nm bash ,
|
.Nm bash
|
||||||
which
|
extension &\*(Gt to redirect stdout and stderr in one go is not parsed.
|
||||||
.Nm mksh
|
|
||||||
provides, are missing, for increased compatibility with legacy scripts.
|
|
||||||
.It
|
.It
|
||||||
|
The
|
||||||
|
.Nm mksh
|
||||||
|
command line option
|
||||||
|
.Fl T
|
||||||
|
is not available.
|
||||||
|
.It
|
||||||
|
Unless
|
||||||
|
.Ic set -o posix
|
||||||
|
is active,
|
||||||
.Nm
|
.Nm
|
||||||
always uses traditional mode for constructs like:
|
always uses traditional mode for constructs like:
|
||||||
.Bd -literal -offset indent
|
.Bd -literal -offset indent
|
||||||
@ -230,27 +254,6 @@ unlike
|
|||||||
.At
|
.At
|
||||||
.Nm ksh ,
|
.Nm ksh ,
|
||||||
does not keep file descriptors \*(Gt 2 private.
|
does not keep file descriptors \*(Gt 2 private.
|
||||||
.It
|
|
||||||
Integers use the host C environment's
|
|
||||||
.Vt long
|
|
||||||
type, not
|
|
||||||
.Vt int32_t .
|
|
||||||
Unsigned arithmetic is done using
|
|
||||||
.Vt unsigned long ,
|
|
||||||
not
|
|
||||||
.Vt uint32_t .
|
|
||||||
Neither value limits nor wraparound is guaranteed.
|
|
||||||
Dividing the largest negative number by \-1 is Undefined Behaviour
|
|
||||||
.Po
|
|
||||||
but might work on 32-bit and 64-bit
|
|
||||||
.Vt long
|
|
||||||
types
|
|
||||||
.Pc .
|
|
||||||
POSIX, by virtue of including ISO C, makes it legal for code triggering
|
|
||||||
Undefined Behaviour to remove all your data and crash the system!
|
|
||||||
.It
|
|
||||||
.Nm
|
|
||||||
only offers the traditional ten file descriptors to scripts.
|
|
||||||
.El
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr mksh 1
|
.Xr mksh 1
|
||||||
|
15
main.c
15
main.c
@ -34,7 +34,7 @@
|
|||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.263 2013/04/27 18:56:41 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.264 2013/05/02 20:21:43 tg Exp $");
|
||||||
|
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
@ -251,10 +251,19 @@ main_init(int argc, const char *argv[], Source **sp, struct block **lp)
|
|||||||
if (argi < 0)
|
if (argi < 0)
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
#if defined(MKSH_BINSHPOSIX) || defined(MKSH_BINSHREDUCED)
|
||||||
|
/* are we called as -sh or /bin/sh or so? */
|
||||||
|
if (!strcmp(ccp, "sh")) {
|
||||||
|
/* either also turns off braceexpand */
|
||||||
|
#ifdef MKSH_BINSHPOSIX
|
||||||
|
/* enable better POSIX conformance */
|
||||||
|
change_flag(FPOSIX, OF_FIRSTTIME, true);
|
||||||
|
#endif
|
||||||
#ifdef MKSH_BINSHREDUCED
|
#ifdef MKSH_BINSHREDUCED
|
||||||
/* set FSH if we're called as -sh or /bin/sh or so */
|
/* enable kludge/compat mode */
|
||||||
if (!strcmp(ccp, "sh"))
|
|
||||||
change_flag(FSH, OF_FIRSTTIME, true);
|
change_flag(FSH, OF_FIRSTTIME, true);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
misc.c
21
misc.c
@ -30,7 +30,7 @@
|
|||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/misc.c,v 1.210 2013/04/27 19:09:13 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/misc.c,v 1.211 2013/05/02 20:21:44 tg Exp $");
|
||||||
|
|
||||||
#define KSH_CHVT_FLAG
|
#define KSH_CHVT_FLAG
|
||||||
#ifdef MKSH_SMALL
|
#ifdef MKSH_SMALL
|
||||||
@ -277,11 +277,10 @@ change_flag(enum sh_flag f, int what, bool newset)
|
|||||||
setgid(kshegid);
|
setgid(kshegid);
|
||||||
#endif
|
#endif
|
||||||
} else if ((f == FPOSIX || f == FSH) && newval) {
|
} else if ((f == FPOSIX || f == FSH) && newval) {
|
||||||
Flag(FPOSIX) = Flag(FSH) = Flag(FBRACEEXPAND) = 0;
|
/* Turning on -o posix or -o sh? */
|
||||||
Flag(f) = newval;
|
Flag(FBRACEEXPAND) = 0;
|
||||||
}
|
} else if (f == FTALKING) {
|
||||||
/* Changing interactive flag? */
|
/* Changing interactive flag? */
|
||||||
if (f == FTALKING) {
|
|
||||||
if ((what == OF_CMDLINE || what == OF_SET) && procpid == kshpid)
|
if ((what == OF_CMDLINE || what == OF_SET) && procpid == kshpid)
|
||||||
Flag(FTALKING_I) = newval;
|
Flag(FTALKING_I) = newval;
|
||||||
}
|
}
|
||||||
@ -306,6 +305,7 @@ parse_args(const char **argv,
|
|||||||
size_t i;
|
size_t i;
|
||||||
int optc, arrayset = 0;
|
int optc, arrayset = 0;
|
||||||
bool sortargs = false;
|
bool sortargs = false;
|
||||||
|
bool fcompatseen = false;
|
||||||
|
|
||||||
/* First call? Build option strings... */
|
/* First call? Build option strings... */
|
||||||
if (cmd_opts[0] == '\0') {
|
if (cmd_opts[0] == '\0') {
|
||||||
@ -379,6 +379,17 @@ parse_args(const char **argv,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
i = option(go.optarg);
|
i = option(go.optarg);
|
||||||
|
if ((i == FPOSIX || i == FSH) && set && !fcompatseen) {
|
||||||
|
/*
|
||||||
|
* If running 'set -o posix' or
|
||||||
|
* 'set -o sh', turn off the other;
|
||||||
|
* if running 'set -o posix -o sh'
|
||||||
|
* allow both to be set though.
|
||||||
|
*/
|
||||||
|
Flag(FPOSIX) = 0;
|
||||||
|
Flag(FSH) = 0;
|
||||||
|
fcompatseen = true;
|
||||||
|
}
|
||||||
if ((i != (size_t)-1) && (set ? 1U : 0U) == Flag(i))
|
if ((i != (size_t)-1) && (set ? 1U : 0U) == Flag(i))
|
||||||
/*
|
/*
|
||||||
* Don't check the context if the flag
|
* Don't check the context if the flag
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#if defined(SHFLAGS_DEFNS)
|
#if defined(SHFLAGS_DEFNS)
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh_flags.h,v 1.12 2012/06/28 20:14:17 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh_flags.h,v 1.13 2013/05/02 20:21:45 tg Exp $");
|
||||||
#define FN(sname,cname,ochar,flags) /* nothing */
|
#define FN(sname,cname,ochar,flags) /* nothing */
|
||||||
#elif defined(SHFLAGS_ENUMS)
|
#elif defined(SHFLAGS_ENUMS)
|
||||||
#define FN(sname,cname,ochar,flags) cname,
|
#define FN(sname,cname,ochar,flags) cname,
|
||||||
@ -88,7 +88,7 @@ FN("nounset", FNOUNSET, 'u', OF_ANY)
|
|||||||
/* ./. don't do logical cds/pwds (non-standard) */
|
/* ./. don't do logical cds/pwds (non-standard) */
|
||||||
FN("physical", FPHYSICAL, 0, OF_ANY)
|
FN("physical", FPHYSICAL, 0, OF_ANY)
|
||||||
|
|
||||||
/* ./. pdksh compat: somewhat more POSIXish mode (non-standard) */
|
/* ./. adhere more closely to POSIX even when undesirable */
|
||||||
FN("posix", FPOSIX, 0, OF_ANY)
|
FN("posix", FPOSIX, 0, OF_ANY)
|
||||||
|
|
||||||
/* -p use suid_profile; privileged shell */
|
/* -p use suid_profile; privileged shell */
|
||||||
@ -97,7 +97,7 @@ FN("privileged", FPRIVILEGED, 'p', OF_ANY)
|
|||||||
/* -r restricted shell */
|
/* -r restricted shell */
|
||||||
FN("restricted", FRESTRICTED, 'r', OF_CMDLINE)
|
FN("restricted", FRESTRICTED, 'r', OF_CMDLINE)
|
||||||
|
|
||||||
/* ./. pdksh compat: called as sh not mksh; kludge mode (non-standard) */
|
/* ./. kludge mode for better compat with traditional sh (OS-specific) */
|
||||||
FN("sh", FSH, 0, OF_ANY)
|
FN("sh", FSH, 0, OF_ANY)
|
||||||
|
|
||||||
/* -s (invocation) parse stdin (pseudo non-standard) */
|
/* -s (invocation) parse stdin (pseudo non-standard) */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user