This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "Rc" Unix shell – news ·newspapers ·books ·scholar ·JSTOR(March 2014) (Learn how and when to remove this message) |
| rc | |
|---|---|
| Paradigm | imperative,pipeline |
| Designed by | Tom Duff |
| Developer | Bell Labs |
| First appeared | 1989; 37 years ago (1989) |
| Typing discipline | weak |
| OS | Cross-platform (Version 10 Unix,Plan 9,Plan 9 from User Space) |
| Website | doc |
| Dialects | |
| Byron's rc | |
| Influenced by | |
| Bourne shell | |
| Influenced | |
| es, theInferno shell | |

rc (for "run commands") is thecommand-line interpreter forVersion 10 Unix andPlan 9 from Bell Labsoperating systems. It resembles theBourne shell, but its syntax is somewhat simpler. It was created byTom Duff, who is better known for an unusualC programming language construct ("Duff's device").[1]
A port of the original rc to Unix is part ofPlan 9 from User Space. A rewrite of rc forUnix-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'sALGOL-like structures, except that it uses anif not construct instead ofelse in the original implementation but useselse im Byron Rakitzis implementation, and has a Bourne-likefor 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.[1]
es (for "extensible shell") is anopen source,command line interpreter developed by Rakitzis and Paul Haahr[2] that uses ascripting language syntax influenced by the rc shell.[3][4] It was originally based on code from Byron Rakitzis's clone ofrc for Unix.[5][6]
Extensible shell is intended to provide a fullyfunctionalprogramming language as aUnix shell.[7] It does so by introducing "program fragments" in braces as a new datatype, lexical scoping vialet, and some more minor improvements. The bulk of es development occurred in the early 1990s, after the shell was introduced at the Winter 1993USENIX conference inSan Diego.[8] Official releases appear to have ceased after 0.9-beta-1 in 1997,[9] and es lacks features present in more popular shells, such aszsh andbash.[10] Apublic domain fork ofes is active as of 2019[update].[11]
The Bourne shell script:
if[hello="$1"];thenechohello,worldelsecase$2in1)echo"$#"'hey'"jude's$3";;2)echo`date`:"$*"::"$@":;;*)echowhynot1>&2esacforiinabc;doecho"$i"donefi
is expressed in rc as:
if(~ $1 hello) echo hello, worldif 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}Rc also supports more dynamic piping:
a |[2] b# pipe onlystandard error of a to b — equivalent to '{ a 2>&1 >&3 3>&- | b; } 3>&1' inBourne shell[1]: Advanced I/O Redirection a <{b} <{c}# becomes a {named pipe with standard output of b} {named pipe with standard output of c},# better known as "process substitution"[1]: Pipeline Branching
rc(1) - Plan 9 manual page