From Wikipedia, the free encyclopedia
  (Redirected from Es (Unix shell))
Jump to: navigation, search
This article is about the shell. For other uses, see RC (disambiguation).
Paradigm(s) imperative, pipeline
Designed by Tom Duff
Developer Bell Labs
Appeared in 1989
Typing discipline weak
Dialects Byron's rc
Influenced by Bourne shell
Influenced es, The Inferno shell.
OS Cross-platform (Version 10 Unix, Plan 9, Plan 9 from User Space)
Website Rc - The Plan 9 Shell
An rc session

rc is the command line interpreter for Version 10 Unix and Plan 9 from Bell Labs operating systems. It resembles the Bourne shell, but its syntax is somewhat simpler. It was created by Tom Duff, who is better known for an unusual C programming language construct ("Duff's device").

A port of the original rc to Unix is part of Plan 9 from User Space. A rewrite of rc for Unix-like operating systems by Byron Rakitzis is also available but includes some incompatible changes.

Rc uses C-like control structures instead of ALGOL-like, as the original Bourne shell uses, except that it uses a construct if not instead of else and has a Bourne-like for loop to iterate over lists. In rc all variables are lists of strings, which eliminates the need for constructs like "$@".



es (for "extensible shell") is an Open source, command line interpreter developed by Rakitzis and Paul Haahr,[1] that uses a scripting language syntactically similar to the rc shell.[2][3] It was originally based on code from Byron Rakitzis's clone of rc for Unix[4][5]

Extensible shell is intended to provide a fully functional programming language as a Unix shell.[6] The bulk of es development occurred in the early 1990s, after the shell was introduced at the Winter 1993 USENIX conference in San Diego,[7] Official releases appear to have ceased after 0.9-beta-1 in 1997,[8] and standard es lacks features as compared to more popular shells, such as zsh and bash.[9]


For example, the Bourne shell script

if [ "$1" = "hello" ]; then
    echo hello, world
    case "$2" in
    1) echo $# 'hey' "jude's"$3;;
    2) echo `date` :$*: :"$@":;;
    *) echo why not 1>&2
    for i in a b c; do
        echo $i

is expressed in rc as

if(~ $1 hello)
    echo hello, world
if not {
    switch($2) {
    case 1
        echo $#* 'hey' 'jude''s'^$3
    case 2
        echo `{date} :$"*: :$*:
    case *
        echo why not >[1=2]
    for(i in a b c)
        echo $i

Because if and if not are two different statements, they must be grouped in order to be used in certain situations.

Rc also supports more dynamic piping:

a |[2] b    # pipe only standard error of a to b — in Bourne shell as a 3>&2 2>&1 >&3 | b
a <>b       # opens b as a's standard input and standard output
a <{b} <{c} # becomes a {standard output of b} {standard output of c}


  1. ^ Spatial Analytical Perspectives on GIS. 
  2. ^ "Ubuntu Manpage: es - extensible shell". Manpages.ubuntu.com. 1992-03-05. Retrieved 2012-08-24. 
  3. ^ "Extensible Shell". FOLDOC. Retrieved 2012-08-24. 
  4. ^ "Shells Available for Linux". LUV. Retrieved 2012-08-24. 
  5. ^ Jones, Tim. "Evolution of shells in Linux". IBM. Retrieved 14 March 2014. 
  6. ^ "Linux Journal 12: What's GNU". Retrieved 2012-08-24. 
  7. ^ Es: A shell with higher-order functions by Byron Rakitzis, NetApp, Inc, and Paul Haahr, Adobe Systems Incorporated; Archived at Archive.Org.
  8. ^ [1]
  9. ^ "UNIX shell differences". Faqs.org. Retrieved 2012-08-24. 

External links[edit]