Command Shells - The Quirks, The Pros and The Cons
OctaneZ asks "I am not trying to start a flame war here, but I would personally be very interested in seeing an analysis, both pros and cons, of all of the common shells: bourne, bash, csh, tcsh, and korn. I understand that a lot of linux users swear by bash because it is the default, but they all have there own "personalities" what does everyone think?" Interesting question. I'd be interested in hearing why some folks prefer csh over bash.
csh: This is used as the default shell on AIX. It has some newt features like ! and !! which allow a user to automajically execute a command in the history. Bash also support shis. In fact most of what csh can do bash can do to. I often find myself usinjg csh commands in bash as I work on an AIX server machine at work. csh uses setenv where bash uses export
ksh: or korn. I hate the name core shell it makes me think of something that wel .. it allows one to set up a command line editor. If you like vi you can have a vi on the command line sort of feeling.
bourne: I believe the bourne shell is used on the BSD's. I did try freebsd once and believe that I was using bournce shell. I found it primative compaared to bash. There was a greater learning curve. There seemed to be more to setup, but that could have been FreeBSD itself. There was a history, but I was not sure hw to access it.
Now bash: bash allows one to use ther arrow keys tonavigate thru the history to make executing commands easier. However this is not the only way to execute the history, one can the ! or !! (!69 will execute teh 69 th command in the history file). both ksh and bash use sthe export command to set envariables. I also believe that you can set vi as your command line editor to execute vi commands in the bash shell. To me bash is more like DOS, and thus you do not deal with the quirks of a command shell as much as you deal with the learning the unix commands, thus it is easier to use.
just muy .02 cents. I am sure that others have there opinions. So send flames > /dev/null and moderate -1G
send flames > /dev/null
Only 'flamers' flame!
Personally I prefer ksh for scripting and bash for interactive use.
I'd die without bash's command line recall.
Korn has some very nice scripting features and works nicely when writing parallel processes.
FreeBSD's default shell is also csh. I personally cannot stand csh, but find tcsh to be perfect for an interactive command-line shell. (I prefer bash for scripting, however, but that wasn't part of the original question.) tcsh also has command-line history which can be accessed with the arrow keys like in bash.
I tried switching my default shell from tcsh to bash this summer as a test (to become more of a stereotypical second-wave unix dork, I guess), but found it very annoying in many respects compared to tcsh, mostly in the way it handles tab-completion. Needless to say, I'm still using tcsh and probably always will be.
(To sum it up: tcsh is the way to go for me. Stay the hell away from csh, and, if you use and like ksh, I'm worried about you.)
- A.P.
--
"One World, one Web, one Program" - Microsoft promotional ad
"Remember when the U.S. had a drug problem, and then we declared a War On Drugs, and now you can't buy drugs anymore?"
Coming from MS-DOS and JP Software's 4DOS, I found bash the easiest shell to adapt to, as a lot of good ideas in 4DOS appear to have come from bash (most notably the up/down arrow keys to navigate command history, and tab completion). bash is a little more demanding on system resources than most of the competition, if you're limited to somewhat older hardware. I think of bash as the mutt of shells, if a bit more bloated than mutt compared to other mail agents.
Fuck Slashdot
tcsh has limited spell checking that can become quite a crutch if you use it long enough. I often find my self hitting 'y' after seeing I mispell something immediately after I hit enter expecting it to execute cat instead of car etc when Im in bash. Wow, do I get an award for that run-on sentence? Maybe fiona apple will name her next cd after this post.
Here's a sample zsh script to get the feel for it:
#!/bin/zsh
for file in "$@"
do
if [ "${file}" != "${(L)file}" -a ! -e "${(L)file}" ]
then
echo "${file} => ${(L)file}"
mv "${file}" "${(L)file}"
fi
done
Which naturally takes renames any file whose name is not all lowercase to be all lowercase. Great for junk imported from brain-damaged operating systems.
Anyways, try it out yourself. Worst that can happen is you won't like it and stop using it. I doubt it, though. Try it, you'll like it!
--
"Convictions are more dangerous enemies of truth than lies."
You may have a look at these pages
http://www.nscp.umd.edu/shells.html
http://www.ntlug.org/~cbbrowne/unixshells.html
I started to run TCSH because I wanted a shell with completion that didn't take a while to start up my programs on my DEC 5000/200. Bash took a few seconds to start up programs, while tcsh did them instantly. I believe that tcsh has a smaller memory footprint as well. Scripting should be left to bourne or ksh.
I use bash on my Linux box because the NCR and Solaris machines at work all use ksh. The struggle of constantly switching back and forth between ksh and tcsh was too much for me. Switching between bash and ksh just means fewer features rather than different commands (e.g. setenv vs. export).
The only problem is that tab completion in both bash and ksh is brain dead; tcsh is the only shell I've used that does it properly.
In bash you have two completion settings. 1) Complete only if there is a unique match. If there is ambiguous match, be stubborn and force the user to type more characters.
2) Cycle through all possible matches on multiple tab presses. This is done right in tcsh, but in bash if there is a unique match this style of completion won't complete it. You have to type it manually.
I'm using tcsh, mainly because of good completion mechanism and history access (by arrows)
Bourne Again Shell (aka bash) and Korn Shell (aka ksh) both are very similar at a scripting level. What scripting features are available in ksh that aren't as nice in bash?
--Joe--
Program Intellivision!
I would suggest (and only suggest) that you give tcsh a try. It seems to be fundamentally different in "feel" to bash, sort of like vi (or a vi variant) is to emacs. I like vi (actually, I do fine with ed) because it is clean. But then again, I am not a code monkey (I am a hardware monkey, really), so I suspect that I just don't see the many obvious benefits of emacs. Oh well. I like vi, it is fast and clean, and tcsh has exactly the same minimal and "right" feel to it.
...
c sh/top.html
/ oview1.1.html
If you like tcsh and vi, perhaps you should take a look at MH or nmh for a mail handler? Just a thought. You may never go back
And yes, I have corrupted a lot of ksh users who were learning emacs (and were constantly angry) and hating pine this way. UNIX (any, including Linux) really ought to be clean and quick, and tcsh gives me that.
I don't know why people like ksh. Really. I think that they are mostly unaware of the alternatives. I know that some shops would not allow any non-vendor-supplied shells, so you were stuck with SV-standard ksh or sh/csh, both of which are far less flexible than ksh, so that may be it. Which is not to say that ksh is bad for scripts -- it is great for scripts, just less great (IMHO) than tcsh or bash or zsh or almost any other modern shell.
Here are some places to look:
http://wwwcip.informatik.uni-erlangen.de/tree/t
http://www.eeng.brad.ac.uk/Unixhelp/Pages/shell
comp.unix.shell
I used to have a mailing list for tcsh that you could subscribe to, but I cannot find it anywhere now. Anyone want to help this fellow out?