Emacs: eshell
eshell is similar in purpose to unix's bash, but used inside emacs.
eshell is written entirely in elisp.
eshell supports most basic bash commands such as {cd, ls, cp, mkdir}.
One major advantage of eshell is that you can run basic linux commands in Microsoft Windows, without installing unix software. Also, eshell is much faster to start.
Alt+x eshell
to start it.

eshell
Advantages of Eshell Over a Regular Shell
- Platform agnostic - it works the same on unix based OSes and Windows
- tramp integration - if you start an eshell while default-directory is pointing at a buffer that is served over tramp, then eshell will use the same connection, and allow manipulation of the remote filesystem without using dired.
- find-file … It's just so much easier being able to type 'find-file blah' as a command it open blah in an emacs buffer (even over tramp, see above)
- consistency - eshell uses its own method of colouring the output of ls and thus is consistent across platforms and shell configurations, which can be important if you ever have to use it on accounts that you don't have authority to modify .bashrc/.profile on.
- /dev/clip and /dev/kill - you can redirect shell commands to the emacs clipboard and killring
- redirect to buffers - along with the above, you can also do things like
ls >> #<buffer *scratch*>
to output the result from ls to the scratch buffer[From NikkiA at reddit]
eshell Documentation
Alt+x info
, then click on eshell.

Eshell is written by John Wiegley [http://newartisans.com/] . Thank you John.
How to set environment variable for just within eshell?
Emacs: Environment Variables in Emacs
eshell Pains
See also: Emacs Shell in Movie TRON