manpagez: man pages & more
man lksh(1)
Home | html | info | man
lksh(1)                   BSD General Commands Manual                  lksh(1)


NAME

     lksh -- Legacy Korn shell built on mksh


SYNOPSIS

     lksh [-+abCefhiklmnprUuvXx] [-+o opt] [-c string | -s | file [args ...]]


DESCRIPTION

     lksh is a command interpreter intended exclusively for running legacy
     shell scripts.  It is built on mksh; refer to its manual page for details
     on the scripting language.  It is recommended to port scripts to mksh
     instead of relying on legacy or idiotic POSIX-mandated behaviour, since
     the MirBSD Korn Shell scripting language is much more consistent.


LEGACY MODE

     lksh has the following differences from mksh:

     o   There is no explicit support for interactive use, nor any command
         line editing or history code.  Hence, lksh is not suitable as a
         user's login shell, either; use mksh instead.

     o   The KSH_VERSION string identifies lksh as ``LEGACY KSH'' instead of
         ``MIRBSD KSH''.

     o   lksh only offers the traditional ten file descriptors to scripts.

     o   lksh uses POSIX arithmetics, which has quite a few implications: The
         data type for arithmetics is the host ISO C 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 com-
         piler is permitted to delete all data and crash the system if Unde-
         fined Behaviour occurs.

     o   The rotation arithmetic operators are not available.

     o   The shift arithmetic operators take all bits of the second operand
         into account; if they exceed permitted precision, the result is
         unspecified.

     o   The GNU bash extension &> to redirect stdout and stderr in one go is
         not parsed.

     o   The mksh command line option -T is not available.

     o   Unless set -o posix is active, lksh always uses traditional mode for
         constructs like:

               $ set -- $(getopt ab:c "$@")
               $ echo $?

         POSIX mandates this to show 0, but traditional mode passes through
         the errorlevel from the getopt(1) command.

     o   lksh, unlike AT&T UNIX ksh, does not keep file descriptors > 2 pri-
         vate.


SEE ALSO

     mksh(1)

     https://www.mirbsd.org/mksh.htm

     https://www.mirbsd.org/ksh-chan.htm


CAVEATS

     To use lksh as /bin/sh, compilation to enable set -o posix by default is
     highly recommended for better standards compliance.

     lksh tries to make a cross between a legacy bourne/posix compatibl-ish
     shell and a legacy pdksh-alike but ``legacy'' is not exactly specified.

     The set built-in command does not have all options one would expect from
     a full-blown mksh or pdksh.

     Talk to the MirOS development team using the mailing list at
     <miros-mksh@mirbsd.org> or the #!/bin/mksh (or #ksh) IRC channel at
     irc.freenode.net (Port 6697 SSL, 6667 unencrypted) if you need any fur-
     ther quirks or assistance, and consider migrating your legacy scripts to
     work with mksh instead of requiring lksh.

MirBSD                           May 22, 2013                           MirBSD

mksh R47 - Generated Sun Aug 25 10:37:46 CDT 2013
© manpagez.com 2000-2025
Individual documents may contain additional copyright information.