mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
As of the previous commit, I finally know how to properly check for a variable of a type created by 'enum'. We need to check for both the NV_UINT16 attribute and the ENUM_disc discipline. Also: - regression test tweaks - add missing tests for previous commit (f600a5ea) |
||
---|---|---|
.. | ||
bltins | ||
data | ||
edit | ||
features | ||
fun | ||
include | ||
sh | ||
tests | ||
builtins.mm | ||
COMPATIBILITY | ||
DESIGN | ||
ksh-regress.rt | ||
ksh-regress.tst | ||
mamexec | ||
Mamfile | ||
mamstate.c | ||
nval.3 | ||
OBSOLETE | ||
PROMO.mm | ||
README | ||
RELEASE | ||
RELEASE88 | ||
RELEASE93 | ||
sh.1 | ||
sh.memo | ||
shell.3 | ||
SHOPT.sh | ||
TYPES |
This directory, and its subdirectories contain the source code for ksh-93; the language described in the second addition of the book, "The KornShell Command and Programming Language," by Morris Bolsky and David Korn which is published by Prentice Hall. ksh-93 has been compiled and run on several machines with several operating systems. The end of this file contains a partial list of operating systems and machines that ksh-93 has been known to run on. Most of the source code for ksh is in the src/cmd/ksh93/sh directory. For information on what's where, see the file DESIGN. #### COMPILE-TIME OPTIONS #### The SHOPT.sh file contains several compilation options that can be set before compiling ksh. Options are of the form SHOPT_option and become #define inside the code. These options are set to their recommended value and some of these may disappear as options in future releases. A value of 0 represents off, 1 represents on, no value means probe. For options where no feature probe is available, probe is the same as off. The options have the following defaults and meanings: 2DMATCH on Two-dimensional ${.sh.match} for ${var//pat/str}. ACCT off Shell accounting. ACCTFILE off Enable per user accounting info. AUDIT off For auditing specific users AUDITFILE "/etc/ksh_audit" BGX on Enables background job extensions. Noted by "J" in the version string when enabled. (1) JOBMAX=n limits the number of concurrent background jobs to n; the (n+1)th background job will block until a running background job completes. (2) SIGCHLD traps are queued so that each completing background job gets its own trap; $! is set to the job pid and $? is set to the job exit status at the beginning of the trap. BRACEPAT on Brace expansion. Expands abc{d,e}f to abcdf abcef. This feature was inspired by the C shell. CMDLIB_HDR "<cmdlist.h>" The header in which you can provide a custom list of libcmd commands to provide as path-bound built-ins. CMDLIB_DIR "\"/opt/ast/bin\"" The default virtual directory prefix for path-bound built-ins. The value must include double quotes. CRNL off <cr><nl> treated as <nl> in shell grammar. DEVFD Use the more secure /dev/fd mechanism instead of FIFOs for process substitutions. On by default on OSs with /dev/fd. DYNAMIC on Dynamic loading of builtins. (Requires dlopen() interface.) ECHOPRINT off Make echo equivalent to print. EDPREDICT off Enables history pattern search menu. As you begin a line with a #, the following characters are treated as a shell pattern and cause matching lines from the history file to be displayed as a numbered list as you type. You can scroll up and down this list or you can use <ESC>nTAB to make this the current line (n defaults to 1 if omitted). Experimental. Bugs: https://github.com/ksh93/ksh/issues/233 ESH on Compile with emacs command line editing. The original emacs line editor code was provided by Mike Veach at IH. FILESCAN on Experimental option that allows fast reading of files using while < file;do ...; done and allowing fields in each line to be accessed as positional parameters. FIXEDARRAY on When using typeset, a name in the format NAME[N] creates a fixed-size array and any attempt to access a subscript N or higher is an error. Multidimensional fixed-size arrays NAME[N1][N2]... are also supported. GLOBCASEDET Adds the 'globcasedetect' shell option. When this shell option is turned on, pathname expansion (globbing) and file name listing and completion automatically become case-insensitive on file systems where the difference between upper- and lowercase is ignored for file names. This compile-time option is enabled by default on operating systems that can support case-insensitive file systems. HISTEXPAND on Enable !-style history expansion similar to csh(1). KIA off Allow generation of shell cross reference database with -R. As of 2021-05-10, no tool that can parse this database is known. If you know of any, please contact us. MULTIBYTE on Multibyte character handling. Requires mblen() and mbctowc(). NAMESPACE on Adds a 'namespace' reserved word that allows defining name spaces. Variables and functions defined within a block like namespace ExampleSpace { commandlist; } all have their names automatically prefixed with '.ExampleSpace.' when defining or using them, creating a separate space of names unique to the block. Outside of the namespace block, they can be accessed using .ExampleSpace.function or ${.ExampleSpace.variable}. Name spaces within name spaces are also supported. NOECHOE off Disable the '-e' option to the 'echo' command, unless SHOPT_ECHOPRINT is enabled. OLDTERMIO off Use either termios or termio at runtime. OPTIMIZE on Optimize loop invariants for with for and while loops. PFSH off Compile with support for profile shell. (Solaris; obsolete) P_SUID off If set, all real uids, greater than or equal to this value will require the -p flag to run suid/sgid scripts. RAWONLY on Turn on if the vi line mode doesn't work right unless you do a set -o viraw. REGRESS off Enable the __regress__ built-in command and instrumented intercepts for testing. REMOTE off Set --rc (read profile scripts) even if ksh was invoked with standard input on a socket, i.e. as a remote shell. SPAWN on Use posix_spawn(3) as combined fork/exec if job control is not active. Improves speed. STATS on Add .sh.stats compound variable. SUID_EXEC on Execute /etc/suid_exec for setuid, setgid script. SYSRC Source /etc/ksh.kshrc on initializing an interactive shell. This is on by default if /etc/ksh.kshrc or /etc/bash.bashrc exists at compile time. TEST_L Add 'test -l' as an alias for 'test -L'. This is on by default if the OS's external 'test' command supports it. TIMEOUT off Set this to the number of seconds for timing out and exiting the shell when you don't enter a command. If non-zero, TMOUT can not be set larger than this value. TYPEDEF on Enable typeset type definitions. VSH on Compile with vi command line editing. The original vi line editor code was provided by Pat Sullivan at CB. #### BUILDING KSH 93U+M #### To build ksh (as well as libcmd and libast libraries on which ksh depends), cd to the top directory and run: bin/package make The compiled binaries are stored in the arch directory, in a subdirectory that corresponds to your architecture. The command 'bin/package host type' outputs the name of this subdirectory. If you have trouble or want to tune the binaries, you may pass additional compiler and linker flags. It is usually best to export these as environment variables before running bin/package as they could change the name of the build subdirectory of the arch directory, so exporting them is a convenient way to keep them consistent between build and test commands. Note that this system uses CCFLAGS instead of the usual CFLAGS. An example that makes Solaris Studio cc produce a 64-bit binary: export CCFLAGS="-m64 -O" LDFLAGS="-m64" bin/package make Alternatively you can append these to the command, and they will only be used for that command. You can also specify an alternative shell in which to run the build scripts this way. For example: bin/package make SHELL=/bin/bash CCFLAGS="-O2 -I/opt/local/include" \ LDFLAGS="-L/opt/local/lib" For more information, run: bin/package help Many other commands in this repo self-document via the --help, --man and --html options; those that do have no separate manual page. Automated installation is not supported yet. To install manually: cp arch/$(bin/package host type)/bin/ksh /usr/local/bin/ cp src/cmd/ksh93/sh.1 /usr/local/share/man/man1/ksh.1 (adapting the destination directories as required). The build should also generate shcomp, a program that will precompile a script. ksh93 is able to recognize files in this format and process them as scripts. You can use shcomp to send out scripts when you don't want to give away the original script source. To be able to run setuid/setgid shell scripts, or scripts without read permission, the SUID_EXEC compile option must be on, and ksh must be installed in the /bin directory, the /usr/bin directory, the /usr/lbin directory, or the /usr/local/bin directory and the name must end in sh. The program suid_exec must be installed in the /etc directory, must be owned by root, and must be a suid program. If you must install ksh in some other directory and want to be able to run setuid/setgid and execute only scripts, then you will have to change the source code file sh/suid_exec.c explicitly. If you do not have ksh in one of these secure locations, /bin/sh will be invoked with the -p options and will fail when you execute a setuid/setgid and/or execute only script. Note, that ksh does not read the .profile or $ENV file when it the real and effective user/group id's are not equal. #### TESTING KSH #### The tests subdirectory contains a number of regression tests for ksh. To run all these tests with the shell you just built, run the command bin/shtests For help and more options, type bin/shtests --man #### OTHER DOCUMENTATION #### The file PROMO.mm is an advertisement that extolls the virtues of ksh. The file sh.1 contains the troff (man) description of this Shell. The file nval.3 contains the troff (man) description of the name-value pair library that is needed for writing built-ins that need to access shell variables. The file sh.memo contains a draft troff (mm) memo describing ksh. The file builtins.mm is a draft troff (mm) memo describing how to write built-in commands that can be loaded at run time. The file NEWS in the top-level directory contains bug fixes and other changes made in the ksh 93u+m fork and supporting libraries. The file COMPATIBILITY contains a list of potential incompatibilities. #### TESTED SYSTEMS #### ksh 93u+m 1.0.0.beta-1 has been compiled and tested on the following. An asterisk signifies minor regression test failures (one or two minor things amiss), two asterisks signify moderate regression test failures (some functionality does not work), and three asterisks signify serious failures (crashes, and/or important functionality does not work). * AIX 7.1 on RISC (PowerPC) * DragonFly BSD 5.8 on x86_64 FreeBSD 12.2 on x86_64 FreeBSD 12.2 on arm64 (thanks to hyenias for donating access to a Pi) GNU/Linux: Alpine 3.12.3 (musl C library) on x86_64 GNU/Linux: CentOS 8.2 on x86_64 GNU/Linux: Debian 10.7 on x86_64 GNU/Linux: Gentoo 2.7 on i386 GNU/Linux: NixOS 19.09 on x86_64 GNU/Linux: Slackware 14.2 on x86_64 GNU/Linux: Ubuntu 16.04 on x86_64 GNU/Linux: Ubuntu 18.04 on armv7l (32-bit) GNU/Linux: Ubuntu 20.04 on aarch64 GNU/Linux: Void Linux (musl C library) on x86_64 *** HP-UX B.11.11 on pa-risc * illumos: OmniOS 2020-08-19 (gcc) on x86_64 macOS 10.13.6 (High Sierra) on x86_64 macOS 10.14.6 (Mojave) on x86_64 * NetBSD 8.1 on x86_64 * NetBSD 9.2 on x86_64 * OpenBSD 6.8 on x86_64 ** QNX 6.5.0 on i386 * Solaris 11.4 (gcc) on x86_64 Solaris 11.4 (Solaris Studio 12.5 cc) on x86_64 * UnixWare 7.1.4 on x86 *** Windows 7 using Cygwin on x86 #### REPORTING BUGS #### Please report any problems or suggestions by opening an issue at: https://github.com/ksh93/ksh Alternatively, email martijn@inlv.org (timely response *not* promised). Good luck!! The ksh 93u+m contributors https://github.com/ksh93/ksh Originally written by: David Korn dgk@research.att.com