To see this in action, run "emacs -Q -f eshell" and then: ~ $ cd /sudo:: /sudo:root@host:~ # *echo hi there > # Wrong type argument: "bufferp echo-stderr" (Any other Tramp method should reproduce this issue.) That's because the echo command is being redirected to two places: stdout is going to the buffer "foo", and stderr is going to the Eshell buffer (via a pipe process). However, that doesn't work for Tramp processes. Attached is a fix with a test. I think this should definitely go in Emacs 29, since it's a pretty bad regression. I'm actually surprised no one has filed a bug on this already. For tracking purposes, I believe this was broken by f07505d1ec (bug#21605). For Emacs 30, it'd be interesting to see if there were a way to get Tramp processes to have different targets for stdout and stderr. That'd make them work a lot more like local processes in Eshell.