Jump to content

Rc (Unix shell)

From Niidae Wiki
Revision as of 11:05, 20 January 2025 by imported>ThanForIllegitimateAsThisDean (Changed $@ to "$@", which now would be equivalent to the aforementioned lists of strings in terms of Bourne's argument quoting.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Template:Short description Template:Lowercase Template:Refimprove Template:Infobox programming language

File:Plan 9 from Bell Labs (process management).png
An rc session

rc (for "run commands") 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").<ref name="RCTD">Template:Cite web</ref>

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 the original Bourne shell's ALGOL-like structures, except that it uses an if not construct 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 "$@". Variables are not re-split when expanded. The language is described in Duff's paper.<ref name=RCTD/>

Influences

[edit]

es

[edit]

es (for "extensible shell") is an open source, command line interpreter developed by Rakitzis and Paul Haahr<ref>Template:Cite book</ref> that uses a scripting language syntax influenced by the rc shell.<ref>Template:Cite web</ref><ref>Template:Cite web</ref> It was originally based on code from Byron Rakitzis's clone of rc for Unix.<ref>Template:Cite web</ref><ref>Template:Cite web</ref>

Extensible shell is intended to provide a fully functional programming language as a Unix shell.<ref>Template:Cite web</ref> It does so by introducing "program fragments" in braces as a new datatype, lexical scoping via let, and some more minor improvements. The bulk of es development occurred in the early 1990s, after the shell was introduced at the Winter 1993 USENIX conference in San Diego.<ref>Es: A shell with higher-order functions by Byron Rakitzis, NetApp, Inc, and Paul Haahr, Adobe Systems Incorporated; Archived at Archive.Org.</ref> Official releases appear to have ceased after 0.9-beta-1 in 1997,<ref>[1]</ref> and es lacks features present in more popular shells, such as zsh and bash.<ref>Template:Cite web</ref> A public domain fork of Template:Code is active Template:As of.<ref>Template:Cite web</ref>

Examples

[edit]

The Bourne shell script:

<syntaxhighlight lang="bash"> if [ "$1" = "hello" ]; then

   echo hello, world

else

   case "$2" in
   1) echo $# 'hey' "jude's"$3;;
   2) echo `date` :$*: :"$@":;;
   *) echo why not 1>&2
   esac
   for i in a b c; do
       echo $i
   done

fi </syntaxhighlight>

is expressed in rc as:

<syntaxhighlight lang="text"> if(~ $1 hello)

   echo hello, world

if not {

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

} </syntaxhighlight>

Rc also supports more dynamic piping:

a |[2] b    # pipe only standard error of a to b — equivalent to '3>&2 2>&1 >&3 | b' in Bourne shell<ref name=RCTD/>Template:Rp
a <>b       # opens file b as a's standard input and standard output
a <{b} <{c} # becomes a {standard output of b} {standard output of c},
            # better known as "process substitution"<ref name=RCTD/>Template:Rp

References

[edit]

Template:Reflist

[edit]

Template:Unix Shells