Rc (Unix shell): Difference between revisions

Content deleted Content added
No edit summary
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
 
(26 intermediate revisions by 18 users not shown)
Line 1:
{{short description|Command line interpreter for Version 10 Unix and Plan 9 from Bell Labs operating systems}}
{{about|the shell||RC (disambiguation)}}
{{lowercase|title=rc}}
{{refimprove|date=March 2014}}
Line 13:
| latest_test_version =
| latest_test_date =
| source_model = [[Open source]]
| typing = [[weak typing|weak]]
| implementations =
| dialects = Byron's rc
| influenced_by = [[Bourne shell]]
| influenced = [[#es (Unix shell)|es]], Thethe [[Inferno (operating system)|Inferno]] shell.
| operating_system = [[Cross-platform]] ([[Version 10 Unix]], [[Plan 9 from Bell Labs|Plan 9]], [[Plan 9 from User Space]])
| license =
Line 24 ⟶ 23:
}}
[[File:Plan 9 from Bell Labs (process management).png|thumb|An rc session]]
'''rc''' (for "[[run commands]]") is the [[command -line interpreter]] for [[Version 10 Unix]] and [[Plan 9 from Bell Labs]] [[operating system]]s. 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)|C programming language]] construct ("[[Duff's device]]").<ref name="RCTD">{{citeCite bookweb |last1last=Duff |first1first=Tom |date=1990 |title="Rc — The Plan 9 Shell" |url=http://doc.cat-v.org/plan_9/4th_edition/papers/rc |workaccess-date=Plan2024-01-26 9, 4th edition|website=cat-v}} ([https://www.scs.stanford.edu/nyu/04fa/sched/readings/rc.pdf PDF])</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 <code>if not</code> construct instead of <code>else</code>, and has a Bourne-like <code>for</code> loop to iterate over lists. In rc, all variables are lists of strings, which eliminates the need for constructs like "<code>[[$@|"$@"]]</code>". Native support for a list datatype is introduced and variablesVariables are not re-split when expanded. The language is described in Duff's paper.<ref name=RCTD/>
 
==Influences== <!--Anchor from redirected [[Es (Unix shell)]] article; caution with changes. -->
 
===es===
''es'' (for "extensible shell") is an [[open source]], [[command line interpreter]] developed by Rakitzis and Paul Haahr<ref>{{cite book | url=https://books.google.com/books?id=iEK6eQQwOF0C&pg=PA43&redir_esc=y#v=onepage&q&f=false | title=Spatial Analytical Perspectives on GIS| isbn=9780748403400| last1=Fischer| first1=Manfred M.| date=13 December 1996| publisher=CRC Press}}</ref> that uses a [[scripting language]] syntax influenced by the rc shell.<ref>{{cite web |url=http://manpages.ubuntu.com/manpages/hardy/man1/es.1.html |title=Ubuntu Manpage: es - extensible shell |publisher=Manpages.ubuntu.com |date=1992-03-05 |accessdateaccess-date=2012-08-24 |url-status=dead |archiveurlarchive-url=https://web.archive.org/web/20140224211945/http://manpages.ubuntu.com/manpages/hardy/man1/es.1.html |archivedatearchive-date=2014-02-24 }}</ref><ref>{{cite web | url=http://foldoc.org/Extensible+Shell |title=Extensible Shell |publisher=FOLDOC |access-date= |accessdate=2012-08-24}}</ref> It was originally based on code from Byron Rakitzis's clone of [[rc shell|rc]] for Unix.<ref>{{cite web | url=http://luv.asn.au/overheads/shells-talk.html |title=Shells Available for Linux |publisher=LUV |access-date=2012-08-24 |accessdatearchive-date=2012-0803-2422 |archive-url=https://web.archive.org/web/20120322025924/http://luv.asn.au/overheads/shells-talk.html |url-status=dead }}</ref><ref>{{cite web|last=Jones|first=Tim|title=Evolution of shells in Linux|url=http://www.ibm.com/developerworks/library/l-linux-shells/|publisher=IBM|accessdateaccess-date=14 March 2014}}</ref>
 
Extensible shell is intended to provide a fully [[functional programming|functional]] [[programming language]] as a [[Unix shell]].<ref>{{cite web|url=http://nnc3.com/lj/LJ/LJ12/0062.html|title=Linux Journal 12: What's GNU|accessdateaccess-date=2012-08-24|url-status=dead|archiveurlarchive-url=https://web.archive.org/web/20130117064248/http://nnc3.com/lj/LJ/LJ12/0062.html|archivedatearchive-date=2013-01-17}}</ref> It does so by introducing "program fragments" in braces as a new datatype, lexical scoping via [[Let expression|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>[http://stuff.mit.edu/afs/sipb/user/yandros/doc/es-usenix-winter93.html Es: A shell with higher-order functions] by Byron Rakitzis, [[NetApp|NetApp, Inc]], and Paul Haahr, [[Adobe Systems Incorporated]]; <u>Archived</u> at [https://web.archive.org/web/20090415213858/http://192.220.96.201/es/es-usenix-winter93.html Archive.Org].</ref> Official releases appear to have ceased after 0.9-beta-1 in 1997,<ref>[https://web.archive.org/web/20230308211038/ftp://ftp.sys.utoronto.ca/pub/es/ ]</ref> and es lacks features aspresent compared toin more popular shells, such as [[zsh]] and [[Bash (Unix shell)|bash]].<ref>{{cite web | url=http://www.faqs.org/faqs/unix-faq/shell/shell-differences/ |title=UNIX shell differences| publisher=Faqs.org | access-date=2012-08-24}}</ref> A [[public ___domain]] fork of {{code|es}} accessdateis active {{as of|2019|lc=2012yes}}.<ref>{{cite web |last1=Haggerty |first1=James |title=wryun/es-08shell: a shell with higher-24order functions |url=http://wryun.github.io/es-shell/ |website=GitHub |date=13 March 2020}}</ref>
 
==Examples==
The Bourne shell script:
 
<sourcesyntaxhighlight lang="bash">
if [ "$1" = "hello" ]; then
echo hello, world
Line 53 ⟶ 52:
done
fi
</syntaxhighlight>
</source>
 
is expressed in rc as:
 
<sourcesyntaxhighlight lang="text">
if(~ $1 hello)
echo hello, world
Line 72 ⟶ 71:
echo $i
}
</syntaxhighlight>
</source>
 
Rc also supports more dynamic piping:
Line 78 ⟶ 77:
a |[2] b ''# pipe only [[standard error stream|standard error]] of a to b — equivalent to '3>&2 2>&1 >&3 | b' in [[Bourne shell]]''<ref name=RCTD/>{{rp|at=Advanced I/O Redirection}}
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 # ''better known as "[[process substitution]]"''<ref name=RCTD/>{{rp|at=Pipeline Branching}}
 
==References==
Line 84:
 
==External links==
*{{man|1|rc|Plan 9||inline}} - Plan 9 manual page.
*[https://9fans.github.io/plan9port/ Plan 9 from User Space] - Includes rc and other Plan 9 tools for Linux, Mac OS X and other Unix-like systems.
*[httphttps://toboldgithub.orgcom/articlerakitzis/rc Byron Rakitzis' rewrite for Unix] ([http://tobold.org/article/rc article] {{Webarchive|url=https://web.archive.org/web/20131005004955/http://tobold.org/article/rc |date=2013-10-05 }})
*[http://hawkwind.utcs.utoronto.ca:8001/mlists/es.html es Official website]