Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
KornShell
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Bourne shell backward compatible Unix shell created by David Korn}} {{Infobox software | name = KornShell | screenshot = OpenBSD ksh Interaction.png | screenshot size = 250px | caption = Interaction with [[OpenBSD]]'s default shell, {{mono|pdksh}} | author = [[David Korn (computer scientist)|David Korn]] | released = {{Start date and age|1983}}<ref name=Gomes>{{Cite newsgroup | author = Ron Gomes | title = Toronto USENIX Conference Schedule (tentative) | date = Jun 9, 1983 | newsgroup = net.usenix | url = http://groups.google.com/group/net.usenix/msg/fa6e1f7de3b63bba?hl=en | access-date = Dec 29, 2010 }}</ref><ref name=Harris>{{Cite newsgroup | author = Guy Harris | title = csh question | date = Oct 10, 1983 | newsgroup = net.flame | url = http://groups.google.com/group/net.flame/msg/4f868085b65af530?hl=en | access-date = Dec 29, 2010 }}</ref> | latest release version = 93u+ | latest release date = {{start date and age|2012|08|01}} | latest preview version = 93v- | latest preview date = {{start date and age|2014|12|24}} | programming language = [[C (programming language)|C]] | operating system = [[Unix]] and [[Unix-like]] (e.g. [[Linux]] and [[macOS]]; also works in [[Windows Subsystem for Linux|Windows 10]]<ref>{{Cite web|title=Korn Shell Launcher for Windows Subsystem for Linux « Musings|url=https://blog.fpmurphy.com/2016/05/korn-shell-launcher-for-windows-subsystem-for-linux-2.html|access-date=2021-01-29|website=blog.fpmurphy.com}}</ref>) | platform = | language = English | genre = [[Unix shell]] | license = {{plainlist| * '''AT&T KornShell''': [[Eclipse Public License]]<ref name="ksh93epl">{{cite web |url=http://www2.research.att.com/~astopen/download/gen/ast-open.html |archive-url=https://web.archive.org/web/20151001051730/http://www2.research.att.com/~astopen/download/gen/ast-open.html |archive-date=October 1, 2015 |title=ast-open package |author=<!--Not stated--> |date=n.d. |publisher=AT&T Research |access-date=December 19, 2022}}</ref> * '''pdksh''': [[public domain software|Public domain]] with some [[ISC License|ISC]]-like code<ref name="pdksh_LEGAL">{{cite web |url=http://www.cs.mun.ca/~michael/pdksh/LEGAL |title=LEGAL |access-date=2010-06-10 |url-status=dead |archive-url=https://web.archive.org/web/20120206143309/http://www.cs.mun.ca/~michael/pdksh/LEGAL |archive-date=2012-02-06 }}</ref> * '''mksh''': [[MirOS Licence]]<ref name="mkshlicense">{{cite web|url=https://www.mirbsd.org/mksh.htm|title=MirBSD Korn Shell|website=Mirbsd.org|access-date=10 December 2018}}</ref> * '''dtksh''': [[Eclipse Public License]] with some [[LGPL]] }} | website = {{Official URL}} | repo = {{URL|github.com/att/ast}} | discontinued = yes }} {{Infobox software | name = ksh2020 | developer = Kurtis Rader, Siteshwar Vashisht, community | latest release version = 2020 | latest release date = {{Start date and age|2019|10|10}} | repo = {{URL|github.com/ksh2020/ksh}} | discontinued = yes | replaces = 93v- | license = [[Eclipse Public License]] | website = }} {{Infobox software | name = ksh93u+m | developer = Martijn Dekker, Johnothan King, hyenias | latest release version = 1.0.10 | latest release date = {{Start date and age|2024|08|02}} | repo = {{URL|github.com/ksh93/ksh}} | website = {{URL|github.com/ksh93/ksh/wiki}} | discontinued = no | replaces = 93u+ | license = [[Eclipse Public License]] }} '''KornShell<!-- sic! -->''' (<code>'''ksh'''</code>) is a [[Unix shell]] which was developed by [[David Korn (computer scientist)|David Korn]] at [[Bell Labs]] in the early 1980s and announced at [[USENIX Annual Technical Conference|USENIX]] on July 14, 1983.<ref name=Gomes/><ref name=Harris/> The initial development was based on [[Bourne shell]] source code.<ref> {{citation | title = ksh - An Extensible High Level Language | last = Korn | first = David G. | publisher = USENIX Association | journal=Proceedings of the USENIX 1994 Very High Level Languages Symposium | date = October 26, 1994 | url = https://www.usenix.org/legacy/publications/library/proceedings/vhll/full_papers/korn.ksh.a | quote = Instead of inventing a new script language, we built a form entry system by modifying the Bourne shell, adding built-in commands as necessary. | access-date = February 5, 2015 }}</ref> Other early contributors were Bell Labs developers Mike Veach and Pat Sullivan, who wrote the [[Emacs]] and [[Vi (text editor)|vi]]-style line editing modes' code, respectively.<ref>{{Cite book | last1 = Bolsky | first1 = Morris I. | last2 = Korn | first2 = David G. | title = The KornShell Command and Programming Language | publisher = Prentice Hall | year = 1989 | location = Englewood Cliffs, NJ | chapter = Acknowledgements | pages = xii | url = https://archive.org/details/kornshellcommand00bols | isbn = 0-13-516972-0 }}</ref> KornShell is backward-compatible with the Bourne shell and includes many features of the [[C shell]], inspired by the requests of Bell Labs users. ==Features== KornShell complies with [[POSIX#POSIX.2|POSIX.2]], Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992.) Major differences between KornShell and the traditional Bourne shell include: * [[Job control (Unix)|job control]], [[alias (command)|command aliasing]], and [[command history]] designed after the corresponding [[C shell]] features; job control was added to the Bourne Shell in 1989<ref>{{cite web|url=https://www.in-ulm.de/~mascheck/bourne/|title=traditional Bourne shell family / history and development|website=In-ulm.de|access-date=10 December 2018}}</ref> * a choice of three command line editing styles based on [[Vi (text editor)|vi]], [[Emacs]], and [[Gosling Emacs]] * [[associative array]]s and built-in [[floating-point arithmetic]] operations (only available in the {{mono|ksh93}} version of KornShell) * dynamic search for functions * mathematical functions * process substitution and process redirection * C-language-like expressions * enhanced expression-oriented {{mono|for}} and {{mono|while}} loops * dynamic extensibility of (dynamically loaded) built-in commands (since {{mono|ksh93}}) * reference variables * hierarchically nested variables * variables can have member functions associated with them * object-oriented-programming (since {{mono|ksh93t}}) ** variables can be objects with member (sub-)variables and member methods ** object methods are called with the object variable name followed (after a dot character) by the method name ** special object methods are called on: object initialization or assignment, object abandonment ({{mono|unset}}) ** composition and aggregation is available, as well as a form of inheritance ==History== [[File:Korn Shell running on SUA.png|thumb|Korn Shell running on [[Windows Services for UNIX]]]] KornShell was originally [[proprietary software]]. In 2000 the source code was released under a license particular to AT&T, but since the '''ksh93q''' release in early 2005 it has been licensed under the [[Eclipse Public License]].<ref name="ksh93epl" /> 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 include {{mono|pdksh}}, {{mono|mksh}}, [[Bash (Unix shell)|Bash]], and [[Z shell]]. The functionality of the original KornShell, {{mono|ksh88}}, was used as a basis for the standard [[POSIX#POSIX.2|POSIX.2]], Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992). Some vendors still ship their own versions of the older {{mono|ksh88}} variant, sometimes with extensions. {{mono|ksh93}} is maintained on [[GitHub]].<ref>{{cite web|url=https://github.com/att/ast|title=This is the AT&T Software Technology ast software download site from AT&T Research. The AT&T AST OpenSource Software Collection provides an overview and Practical Reusable UNIX Software..|date=10 December 2018|access-date=10 December 2018|website=Github.com}}</ref> As "Desktop KornShell" ({{mono|dtksh}}), {{mono|ksh93}} is distributed as part of the [[Common Desktop Environment]].<ref name="RosenblattRobbins2002">{{cite book|author1=Bill Rosenblatt|author2=Arnold Robbins|title=Learning the Korn Shell|url=https://books.google.com/books?id=5nMCY272chUC&pg=PR8|year=2002|publisher=O'Reilly |isbn=978-0-596-00195-7|pages=viii–ix|edition=2}}</ref> This version also provides shell-level mappings for [[Motif (software)|Motif]] widgets. It was intended as a competitor to [[Tcl]]/[[Tk (software)|Tk]].<ref name="Pendergrast1995">{{cite book|first=J. Stephen |last=Pendergrast|title=Desktop KornShell graphical programming|url=https://books.google.com/books?id=O6xQAAAAMAAJ|year=1995|publisher=Addison-Wesley|isbn=978-0-201-63375-7|page=359}}</ref> The original KornShell, {{mono|ksh88}}, became the default shell on [[AIX]] in version 4,<ref name="CannonTrent1999">{{cite book|author1=Casey Cannon|author2=Scott Trent|author3=Carolyn Jones|title=Simply AIX 4.3|year=1999|publisher=Prentice Hall |isbn=978-0-13-021344-0|page=21}}</ref><ref>{{cite web|url=https://www.ibm.com/support/knowledgecenter/ssw_aix_61/eos/eos.htm?origURL=api/redirect/aix/v6r1/topic/com.ibm.aix.cmds/doc/aixcmds5/sh.htm|title=IBM Knowledge Center|publisher=IBM|access-date=10 December 2018}}</ref> with ksh93 being available separately.<ref>{{cite web|url=https://www.ibm.com/support/knowledgecenter/ssw_aix_61/eos/eos.htm?origURL=api/redirect/aix/v6r1/topic/com.ibm.aix.baseadmn/doc/baseadmndita/korn_shell_enhanced.htm|title=IBM Knowledge Center|publisher=IBM|access-date=10 December 2018}}</ref> [[UnixWare]] 7 includes both {{mono|ksh88}} and {{mono|ksh93}}. The default Korn shell is {{mono|ksh93}}, which is supplied as {{mono|/usr/bin/ksh}}, and the older version is available as {{mono|/usr/bin/ksh88}}.<ref name="UW714doc">{{cite web|url=http://uw714doc.sco.com/en/DIFFS/UNIX95_Conformance.html#ksh-93_vs_ksh-88|title=UNIX95 conformance|website=Uw714doc.sco.com|access-date=10 December 2018}}</ref> UnixWare also includes {{mono|dtksh}} when [[Common Desktop Environment|CDE]] is installed. The '''ksh93''' distribution underwent a less stable fate after the authors left AT&T around 2012 at stable version '''ksh93u+'''. The primary authors continued working on a '''ksh93v-''' beta branch until around 2014. That work was eventually taken up primarily by [[Red Hat]] in 2017 (due to customer requests) and resulted in the eventual initial release of '''ksh2020'''<ref name="ksh2020">{{cite web |title=ksh2020 |url=https://github.com/ksh2020/ksh |website=GitHub |date=26 Feb 2021 |language=en}}</ref> in the fall of 2019. That initial release (although fixing several prior stability issues) introduced breakage and compatibility issues.<ref>{{cite web |title=ksh2020 changelog |url=https://github.com/att/ast/blob/ksh2020/CHANGELOG.md |website=GitHub |date=29 May 2020 |language=en}}</ref> In March 2020, AT&T decided to roll back the community changes, stash them in a branch, and restart from '''ksh93u+''', as the changes were too broad and too ksh-focused for the company to absorb into a project in maintenance mode.<ref>{{cite web |title=Rewinding this repo and encouraging community · Issue #1466 · att/ast |url=https://github.com/att/ast/issues/1466 |website=GitHub |language=en}}</ref><ref>{{cite web |title= segfault with extended globs · #1464 · att/ast |url=https://github.com/att/ast/issues/1464#issuecomment-581159703 |website=GitHub |language=en}}</ref> '''ksh2020''' <ref>{{Cite web|title= 2020.0.0: Stable release of ksh-2020.0.0 |url=https://github.com/att/ast/releases/tag/2020.0.0|access-date=2021-01-29|quote=Note: ksh2020 is not maintained or supported|website=GitHub|language=en}}</ref> was released as a "major release for several reasons"<ref>{{Cite web|title=ksh 2020.0.0 CHANGELOG|url=https://github.com/att/ast/blob/2020.0.0/CHANGELOG.md |date=2021-01-29|website=GitHub|language=en}}</ref> such as removal of [[EBCDIC]] support, dropping support for binary plugins written for '''ksh93u+''' and removal of some broken math functions, but has never been maintained or supported by AT&T (not even on its initial release date). The '''ksh2020''' source code has received no commits since February 2020 and it was archived read only in October 2021.<ref name="ksh2020"/> Following the issues with the '''ksh2020''' branch and its abandonment, a new repository was created in May 2020 for the '''ksh93u+m''' branch, based on the last stable AT&T release ('''ksh93u+''' 2012-08-01) where bugfix development actively continues.<ref>{{cite web |title=ksh '''93u+m''' |url=https://github.com/ksh93/ksh |website=GitHub|date=17 November 2021 }}</ref> ==Primary contributions to the main software branch== 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 of '''KSH2020''' 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. ===Primary individual contributors=== The following are listed in a roughly ascending chronological order of their contributions: * [[David Korn (computer scientist)|David G. Korn]] (AT&T Bell Laboratories, AT&T Laboratories, and Google; and creator) * Glenn S. Fowler (AT&T Bell Laboratories, AT&T Laboratories) * Kiem-Phong Vo (AT&T Bell Laboratories, AT&T Laboratories) * Adam Edgar (AT&T Bell Laboratories) * Michael T. Veach (AT&T Bell Laboratories) * Patrick D. Sullivan (AT&T Bell Laboratories) * Matthijs N. Melchior (AT&T Network Systems International) * Karsten-Fleischer (Omnium Software Engineering) * Boyer-Moore * Siteshwar Vashisht (Red Hat) * Kurtis Rader ===Integration consultant=== * Roland Mainz ===Primary corporate contributors=== The following are listed in a roughly ascending chronological order of their contributions: * [[AT&T Bell Laboratories]] * [[AT&T|AT&T Network Systems International]] * [[AT&T Labs|AT&T Laboratories (now AT&T Labs)]] * [[Omnium Software Engineering]] * [[Oracle Corporation]] * [[Google]] * [[Red Hat]] ===Donated corporate resources=== 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): * [[Coverity]] * [[GitHub]] * [[Travis CI]] ==Variants== There are several [[Fork (software development)|forks]] and [[Clone (computing)#Software|clones]] of KornShell: * {{mono|dtksh}} – a fork of {{mono|ksh93}} included as part of [[Common Desktop Environment|CDE]]. * {{mono|tksh}} – a fork of {{mono|ksh93}} that provides access to the [[Tk (software)|Tk]] [[widget toolkit]]. * {{mono|oksh}} – a port of [[OpenBSD]]'s variant of KornShell, intended to be maximally portable<ref>{{cite web |title=oksh at GitHub|url=https://github.com/ibara/oksh/blob/master/README.md |website=GitHub |date=1 August 2020 |language=en}}</ref> across operating systems. It was used as the default shell in [[DeLi Linux]] 7.2. * {{mono|loksh}} – a [[Linux]] port of [[OpenBSD]]'s variant of KornShell, with minimal changes.<ref>{{cite web |title=loksh at GitHub|url=https://github.com/dimkr/loksh/blob/master/README.md |website=GitHub |date=15 October 2021 |language=en}}</ref> * {{mono|mksh}} – a [[Free software|free]] implementation of the KornShell language, forked from OpenBSD {{mono|pdksh}}. It was originally developed for [[MirOS BSD]] and is licensed under [[Permissive free software licence|permissive]] (though not public domain) terms; specifically, the [[MirOS Licence]].<ref name="mkshlicense" /> In addition to its usage on BSD, this variant has replaced {{mono|pdksh}} on Debian,<ref name="debmksh">{{Cite web |url=https://people.debian.org/~spaillard/Debian_Release_Notes/mksh.html |title=5.11. The PDKSH to MKSH transition |access-date=2014-07-28 |archive-url=https://web.archive.org/web/20140728110151/https://people.debian.org/~spaillard/Debian_Release_Notes/mksh.html |archive-date=2014-07-28 |url-status=dead }}</ref> and is the default shell on Android. * {{mono|SKsh}} – an [[AmigaOS]] variant that provides several Amiga-specific features, such as [[ARexx]] interoperability.<ref>{{Cite web|url=http://aminet.net/package/util/shell/SKsh21|title = Aminet - util/Shell/SKsh21.LZH}}</ref> In this tradition [[MorphOS]] uses {{mono|pdksh}} in its SDK. * [[MKS Inc.]]'s MKS Korn shell – a proprietary implementation of the KornShell language from [[Microsoft Windows Services for UNIX]] (SFU) up to version 2.0; according to David Korn, the MKS Korn shell was not fully compatible with KornShell in 1998.<ref>{{cite web|url=http://slashdot.org/articles/01/02/06/2030205.shtml |title=David Korn Tells All |date=7 February 2001 |publisher=Slashdot |access-date=2009-10-22}}</ref><ref>{{cite web|url=http://lists.blu.org/pipermail/discuss/1998-August/002393.html |title=Jerry Feldman — USENIX NT/LISA NT conference attendee |date=29 August 1998 |publisher=Lists.blu.org |access-date=2009-10-22}}</ref> In SFU version 3.0 [[Microsoft]] replaced the MKS Korn shell with a new POSIX.2-compliant shell as part of [[Interix]].<ref>{{cite web|url=https://technet.microsoft.com/de-de/library/bb463204(en-us).aspx |title=Windows Services for UNIX Version 3.0 |date=5 December 2007 |publisher=Technet.microsoft.com |access-date=2009-10-22}}</ref> * KornShell is included in [[UWIN]], a Unix compatibility package by David Korn.<ref name="Olczak2001">{{cite book|author=Anatole Olczak|title=The Korn shell: Unix and Linux programming manual|url=https://books.google.com/books?id=dCIJv94vXUMC&pg=PA4|year=2001|publisher=Addison-Wesley Professional|isbn=978-0-201-67523-8|pages=4}}</ref> * {{mono|/bin/sh}} in Doug Gwyn's (US Army BRL) System V on BSD package included Ron Natalie's version of the SVR2 {{mono|/bin/sh}} that had both job control and command line editing. This was a contemporary of the original {{mono|ksh}} at a time when it had not escaped AT&T. This was subsequently the {{mono|/bin/sh}} that shipped with all the CMU Mach-derived systems.<ref>{{cite web | url=https://tuhs.org/mailman3/hyperkitty/list/tuhs@tuhs.org/thread/L6YV554T3DNXIKKUPKX2UFC473TT7B6E/ | url-status=live | title="Job Control and other terminal fun" | first=Ron | last=Natalie | date=2023-01-30 | others=From the TUHS ("The Unix Heritage Society") mailing list | quote=... 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. | access-date=2024-07-07 | archive-url=https://web.archive.org/web/20240707205154/https://www.tuhs.org/mailman3/hyperkitty/list/tuhs@tuhs.org/thread/L6YV554T3DNXIKKUPKX2UFC473TT7B6E/ | archive-date=2024-07-07 }}</ref> ==See also== {{Portal|Free and open-source software}} * [[Comparison of computer shells]] * [[List of Unix commands]] * [[test (Unix)]] ==References== {{Reflist|30em}} ==Further reading== * {{cite book|author1=Morris I. Bolsky|author2=David G. Korn|title=The new KornShell command and programming language|year=1995|publisher=Prentice Hall PTR|isbn=978-0-13-182700-4|url=https://archive.org/details/newkornshellcomm00bols}} * {{cite journal |author1=David G. Korn |author2=Charles J. Northrup |author3=Jeffery Korn |url=http://www.linuxjournal.com/article/1273 |url-status=live |title=The New KornShell—ksh93 |journal=[[Linux Journal]] |number=27 |date=July 1996 |archive-date=2015-10-11 |archive-url=https://archive.today/20151011155538/http://www.linuxjournal.com/article/1273 }} ==External links== * {{webarchive |url=https://web.archive.org/20130605160033/http://www.research.att.com/~gsf/man/man1/ksh.html |date=June 5, 2013 |title=ksh93 man page }} * {{webarchive |url=https://web.archive.org/20151105130220/http://www2.research.att.com/sw/download/man/man1/ksh88.html |date=November 5, 2015 |title = ksh88 man page}} * {{webarchive |url=https://web.archive.org/20161021105605/http://web.cs.mun.ca/~michael/pdksh/ |date=October 21, 2016 |title=Public Domain Korn shell (pdksh)}} * [http://www.mirbsd.org/mksh.htm MirBSD Korn Shell (mksh)] * {{man|1|mksh|MirOS BSD}} {{Unix shells}} {{Authority control}} [[Category:Cross-platform software]] [[Category:Free software programmed in C]] [[Category:Scripting languages]] [[Category:Software that uses Meson]] [[Category:Unix shells]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Authority control
(
edit
)
Template:Citation
(
edit
)
Template:Cite book
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Infobox
(
edit
)
Template:Infobox software
(
edit
)
Template:Main other
(
edit
)
Template:Man
(
edit
)
Template:Mono
(
edit
)
Template:Portal
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Template other
(
edit
)
Template:Unix shells
(
edit
)
Template:Webarchive
(
edit
)