While I use emacs for all all sorts of things, one of the things I haven't done much is run shells from within emacs. I'm not sure why. I'm a command line wonk and adding command line goodness and emacs together seems like a natural. Maybe it's because back in the day I spent a lot of time on MS-DOS systems. You could get a reasonable Unixy facsimile using tools like the MKS toolkit and I like so many other young computer scientists wrote our own small shells when we learned C so I used that insted of command.com.
In any event, I'm trying to use the shell within emacs more.
Here's a quick video showing both shell, which runs whatever your default shell is in an emacs buffer and eshell which is emacs own shell.
I use a couple of packages to smooth over a couple of things.
Virtuelenvwrapper smooths things voer with the python virtaulenv and virtualenvwrapper linux packages:
(use-package virtualenvwrapper :ensure t :config (venv-initialize-interactive-shells) (venv-initialize-eshell))
Only relevant if you use Python and virtualenvs.
and more importantly, better shell:
(use-package better-shell :ensure t :bind (("C-'" . better-shell-shell) ("C-;" . better-shell-remote-open)))
cleans things up when using a termianl to connect to a remote machine.
If you use a shell from within emacs as part of your workflow, please post how, or better, make a video!!!!
Video series overview page: