![]() Interaction withOpenBSD's default shell,pdksh | |
Original author(s) | David Korn |
---|---|
Initial release | 1983; 42 years ago (1983)[1][2] |
Final release | 93u+ / August 1, 2012; 12 years ago (2012-08-01) |
Preview release | 93v- / December 24, 2014; 10 years ago (2014-12-24) |
Repository | github |
Written in | C |
Operating system | Unix andUnix-like (e.g.Linux andmacOS; also works inWindows 10[3]) |
Available in | English |
Type | Unix shell |
License |
|
Website | kornshell![]() |
Developer(s) | Kurtis Rader, Siteshwar Vashisht, community |
---|---|
Final release | 2020 / October 10, 2019; 5 years ago (2019-10-10) |
Repository | github |
Predecessor | 93v- |
License | Eclipse Public License |
Website | kornshell![]() |
Developer(s) | Martijn Dekker, Johnothan King, hyenias |
---|---|
Stable release | 1.0.10 / August 2, 2024; 7 months ago (2024-08-02) |
Repository | github |
Predecessor | 93u+ |
License | Eclipse Public License |
Website | github |
KornShell (ksh
) is aUnix shell which was developed byDavid Korn atBell Labs in the early 1980s and announced atUSENIX on July 14, 1983.[1][2] The initial development was based onBourne shell source code.[7] Other early contributors were Bell Labs developers Mike Veach and Pat Sullivan, who wrote theEmacs andvi-style line editing modes' code, respectively.[8] KornShell is backward-compatible with the Bourne shell and includes many features of theC shell, inspired by the requests of Bell Labs users.
KornShell complies withPOSIX.2, Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992.) Major differences between KornShell and the traditional Bourne shell include:
KornShell was originallyproprietary software. In 2000 the source code was released under a license particular to AT&T, but since theksh93q release in early 2005 it has been licensed under theEclipse Public License.[4] KornShell is available as part of the AT&T Software Technology (AST) Open Source Software Collection. As KornShell was initially only available through a proprietary license from AT&T, a number of free and open source alternatives were created. These includepdksh,mksh,Bash, andZ shell.
The functionality of the original KornShell,ksh88, was used as a basis for the standardPOSIX.2, Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992).
Some vendors still ship their own versions of the olderksh88 variant, sometimes with extensions.ksh93 is maintained onGitHub.[10]
As "Desktop KornShell" (dtksh),ksh93 is distributed as part of theCommon Desktop Environment.[11] This version also provides shell-level mappings forMotif widgets. It was intended as a competitor toTcl/Tk.[12]
The original KornShell,ksh88, became the default shell onAIX in version 4,[13][14] with ksh93 being available separately.[15]
UnixWare 7 includes bothksh88 andksh93. The default Korn shell isksh93, which is supplied as/usr/bin/ksh, and the older version is available as/usr/bin/ksh88.[16] UnixWare also includesdtksh whenCDE is installed.
Theksh93 distribution underwent a less stable fate after the authors left AT&T around 2012 at stable versionksh93u+. The primary authors continued working on aksh93v- beta branch until around 2014. That work was eventually taken up primarily byRed Hat in 2017 (due to customer requests) and resulted in the eventual initial release ofksh2020[17] in the fall of 2019. That initial release (although fixing several prior stability issues) introduced breakage and compatibility issues.[18] In March 2020, AT&T decided to roll back the community changes, stash them in a branch, and restart fromksh93u+, as the changes were too broad and too ksh-focused for the company to absorb into a project in maintenance mode.[19][20]ksh2020[21] was released as a "major release for several reasons"[22] such as removal ofEBCDIC support, dropping support for binary plugins written forksh93u+ and removal of some broken math functions, but has never been maintained or supported by AT&T (not even on its initial release date). Theksh2020 source code has received no commits since February 2020 and it was archived read only in October 2021.[17]
Following the issues with theksh2020 branch and its abandonment, a new repository was created in May 2020 for theksh93u+m branch, based on the last stable AT&T release (ksh93u+ 2012-08-01) where bugfix development actively continues.[23]
For the purposes of the lists below, the main software branch of KSH is defined as the original program, dating from July 1983, up and through the release ofKSH2020 in late 2019.Continuing development of follow-on versions (branches) of KSH have split into different groups starting in 2020 and are not elaborated on below.
The following are listed in a roughly ascending chronological order of their contributions:
The following are listed in a roughly ascending chronological order of their contributions:
Besides the primary major contributing corporations (listed above), some companies have contributed free resources to the development of KSH. These are listed below (alphabetically ordered):
There are severalforks andclones of KornShell:
Instead of inventing a new script language, we built a form entry system by modifying the Bourne shell, adding built-in commands as necessary.
Note: ksh2020 is not maintained or supported
... The Berkeley job control was an interesting hack. For us at BRL the problem was I absolutely detested the C shell syntax. The Korn shell hadn't escaped from AT&T yet, so, I spent time figuring out how that really worked in the C shell (not really well documented), mostly by inspection, and then reimplemented it in the Bourne Shell (we were using the System V source code version for that). I still couldn't get traction at BRL for using the Bourne shell because by that time, tcsh had come out with command line editing. So back to the shell sources I went. By this time, 5R2 had come out so I grabbed the shell source form[sic] that. [...] I reworked emacs-ish command line editing into the shell. Subsequently, I had a nice conversation with David Korn at USENIX, being probably at that point the two most familiar with Bourne shell job control internals. I also sat down with the guys writing either bash or the pdksh (can't remember which) and explained all how this work[sic]. ... Years later I, had left the BRL, spent three years as a Rutgers administrator and was working for a small startup in Virginia. There was a MIPS workstation there. I was slogging along using ed... Not thinking about it, I attempted to retrieve a backgrounded job by typing "fg." To my surprise the shell printed "Job control not enabled." Hmm, I say. That sounds like my error message. "set -J" I type. "Job control enabled." Hey! This is my shell. Turns out Doug Gwyn put my mods into his "System V on BSD" distribution tape and it had made its way into the Mach code base and so every Mach-derived system ended up with it.
mksh(1)
– MirOS BSD i386 General CommandsManual