For years, I'd see eshell (an emacs command shell) come across my radar, and being an emacs guy, I'd naturally try it out. And within a few minutes, I'd be back to my bash and screen ways. It recently popped up again (and for the life of me, I can't recall where) and I decided I'd take a closer look. I realized while perusing the manual that I'd had a key misconceptions about eshell: I assumed it was more complicated than it is.
Perhaps it was the important sounding name, but I just assumed that learning eshell was going to be like learning calc or gnus. Sure, these are both is an amazing tools, but they've got so much you can learn, you might feel like you've never mastered it all.
eshell it turns out isn't particularly complicated at all. In fact, after playing with it for a couple of days, I've come to realize it has one especially cool feature: you can enter regular unix-like commands (eg. ls -l) *and* you can enter in elisp functions (find-file foo.php). eshell does exactly what you'd expect it to do, if it can't find the command as an alias, or executable on disk, it tries to execute it as a lisp function. While this may be clever, it doesn't seem especially useful at first. For example, you can type the following:
substring "hello world" 3 9
This is converted to (substring "hello world" 3 9), which is novel, but not something you typically need to do at a command line.
What gets especially interesting is when you type this:
find-file index.html
This invokes (find-file "index.html") which opens up the current file. In other words, you've entered a shell command and seamlessly jumped into emacs world. Here are some more examples:
dired . # kick off M-x dired on the current directory
rgrep TODO "*.html" # kick off M-x rgrep on all HTML files below the current directory
svn-update ${pwd} # kick off M-x svn-update on the current working directory
Notice in the last case the use of ${...} notation. This notation actually invokes a sub-eshell so you can put in arbitrary commands or elisp within ${...}.
With this elisp integration, I'm truly starting to see the light: eshell isn't about creating a shell experience that's better than say bash + screen, it's about giving you a new way to interact with emacs. Rather than thinking "OK, I'm going to do some unixy command line stuff, I better switch to an xterm" you can think "hey, I bet half of this could be done in command-line-land and half could be done in emacs, and eshell gives me a seamless way to do that."
Thanks to eshell, my fingers are finding new and faster ways, to get stuff done. And we all know, that's what emacs is all about.
Definitely go off and read Mastering Eshell, and learn about the other cool features of eshell. But don't do what I did, and psych yourself out thinking there's going to be a huge learning curve.