rc
Paradigm | imperative, pipeline |
---|---|
Designed by | Tom Duff |
Developer | Bell Labs |
First appeared | 1989 |
Typing discipline | weak |
OS | Cross-platform (Version 10 Unix, Plan 9, Plan 9 from User Space) |
Website | Rc - The Plan 9 Shell |
Dialects | |
Byron's rc | |
Influenced by | |
Bourne shell | |
Influenced | |
es, The Inferno shell. |
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").
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, 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 "$@
".
Influences
es
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]
Examples
For example, the Bourne shell script
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
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}
References
- ↑ Spatial Analytical Perspectives on GIS.
- ↑ "Ubuntu Manpage: es - extensible shell". Manpages.ubuntu.com. 1992-03-05. Retrieved 2012-08-24.
- ↑ "Extensible Shell". FOLDOC. Retrieved 2012-08-24.
- ↑ "Shells Available for Linux". LUV. Retrieved 2012-08-24.
- ↑ Jones, Tim. "Evolution of shells in Linux". IBM. Retrieved 14 March 2014.
- ↑ "Linux Journal 12: What's GNU". Retrieved 2012-08-24.
- ↑ Es: A shell with higher-order functions by Byron Rakitzis, NetApp, Inc, and Paul Haahr, Adobe Systems Incorporated; Archived at Archive.Org.
- ↑
- ↑ "UNIX shell differences". Faqs.org. Retrieved 2012-08-24.
External links
- - Plan 9 manual page.
- Byron Rakitzis' rewrite for Unix
- es Official website