I tried to use Emacs for that for a while, but whether it's ansi-term or eshell it always felt a little kludgy. There's always this mental exercise of having to switch between char and line mode. I hate that I could accidentally delete characters in stdout sometimes and then something just breaks in my head for me.