Subject: eshell breaking tramp-remote-path
From: Xiaoyue Chen <[email-masked]>
To: [email-masked]
Date: Sun, 12 Nov 2023 08:52:00 +0000 (UTC)
List-Id: <debbugs-submit.debbugs.gnu.org>

Tags: patch

Hello,

Commit 2af092741e5 broke tramp-remote-path, making eshell unusable for
sudo, ssh, etc. So any emacs version after that is effected. I found the
issue on emacs 29.1.90.

Steps to reproduce:

1. emacs -Q

2. Evaluate the following

   (require 'eshell)
   (add-to-list 'eshell-modules-list 'eshell-tramp)
   (require 'tramp)
   (add-to-list 'tramp-remote-path 'tramp-own-remote-path)

3. M-x eshell

4. Type "sudo uname" and press Enter

5. The output is erroneous

   sh: /home/xchen/env: No such file or directory
   ///374ad82e298d0a7279e9e4c98722b9f5#$

The cause is a minor error in eshell-gather-process-output

  (when (file-remote-p default-directory)
    (push (concat "PATH=" real-path) process-environment)
    (setq tramp-remote-path (eshell-get-path)))

tramp-remote-path should not contain the remote part of the directories,
so use (eshell-get-path t) fixes it.

Attached is a simple patch to fix this issue.

/Xiaoyue

In GNU Emacs 29.1.90 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo
version 1.16.0, Xaw3d scroll bars)
Repository revision: emacs-29.1.90
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101008
System Description: NixOS 23.11 (Tapir)

Configured using:
 'configure
 --prefix=/nix/store/0hkpjpd4nh282znb7z225iramjcgrv0n-emacs-unstable-29.1.90
 --disable-build-details --with-modules --with-x-toolkit=lucid
 --with-xft --with-cairo --with-native-compilation --with-tree-sitter'

diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el
index 6561561440e..e7e91f08741 100644
--- a/lisp/eshell/esh-proc.el
+++ b/lisp/eshell/esh-proc.el
@@ -304,7 +304,7 @@ Used only on systems which do not support async subprocesses.")
     ;; future, remember to remove `tramp-remote-path' above, too.)
     (when (file-remote-p default-directory)
       (push (concat "PATH=" real-path) process-environment)
-      (setq tramp-remote-path (eshell-get-path)))
+      (setq tramp-remote-path (eshell-get-path t)))
     ;; MS-Windows needs special setting of encoding/decoding, because
     ;; (a) non-ASCII text in command-line arguments needs to be
     ;; encoded in the system's codepage; and (b) because many Windows

--
Xiaoyue Chen
VVVU: Workers, Unite!