Introduction
Statistics
Contact
Development
Disclaimer
Help
2018-04-05
__P_l_a_n__9__n_u_g_g_e_t_s__-__T_h_e__r_c__s_h_e_l_l_______________
oday I want to show you a real gem that has been developed by Tom
uff[0]: The rc shell. It is the only shell (by default) available
or plan 9. It features a bourne shell like syntax but offers a much
leaner syntax.
like it a lot due to:
* Variables are list of strings by default and subscriptable: You
can write things like '''athing=(foo bar baz); echo $athing(1 1 3
2)''' which gives 'foo foo baz bar'.
* String contatenation is (almost) explicit: You use the caret ^
operator.
* You need to enclose everything containing spaces in ''. You
escape a ' by writing ''. No backslash hell.
* Pattern matching on variables with ~
* switch statements look like C, but work without break. Funnily
this means that Duff's device does not work in this shell :)
* Pipeline branching: You can feed the output of separate commands
into pipes with '''<{command}''' (or '''>{command}''')
* Sane syntax for I/O redirection: You give it the file descriptor
number: '''make [2]> warnings.log [1]>build.log'''
Or grep the stderr with '''strace foo |[2] grep open'''
* Some of the functions you have gotten attached to are missing
but can be replaced easily. For example there is no read builtin.
But here's the replacement:
''rc
fn read{
$1=‘{awk ’{print;exit}’}
}
''
ll this and more can be found in the rc paper[1] describing the
hole syntax. I think the saner quoting rules make scripts less error
rone and the pipe syntax enables easy scripting with networking
ools like ii[2]. There is a port to modern unix available[3] just
emember to pass the '--enable-edit=' option to configure. Yes, it
ses autotools. Oh the irony...
__References________________________________________________________
0]: gopher://gopherpedia.com:70/0/Tom Duff
1]: http://doc.cat-v.org/plan_9/4th_edition/papers/rc
2]: https://tools.suckless.org/ii/
3]: https://github.com/rakitzis/rc