Package: emacs;
Reported by: Sean Devlin <spd <at> toadstyle.org>
Date: Sat, 20 Jan 2024 18:32:01 UTC
Severity: normal
Found in version 29.1
Done: Jim Porter <jporterbugs <at> gmail.com>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Sean Devlin <spd <at> toadstyle.org> To: 68618 <at> debbugs.gnu.org Subject: bug#68618: 29.1; Tramp remote process fails in Eshell Date: Sat, 20 Jan 2024 13:30:55 -0500
Hi folks, I found a situation where a Tramp remote process invoked via Eshell fails unexpectedly. I discovered this while developing a custom Tramp method, but it could equally apply to built-in methods under certain system configurations. Here's a recipe to reproduce: 1. Create a symlink to the ssh program in an unusual location: $ mkdir -p /tmp/bin $ ln -s $(which ssh) /tmp/bin/myssh 2. Start Emacs with this directory in your path: $ PATH=/tmp/bin:$PATH emacs -Q 3. Evaluate these forms: (require 'tramp) (add-to-list 'tramp-methods `("myssh" (tramp-login-program "myssh") ,@(cdr (assoc "ssh" tramp-methods)))) 4. M-x eshell 5. In Eshell: $ cd /myssh:someremote: $ uname -a 6. The Eshell buffer will show some corrupt output something like: sh: cd: /root/: No such file or directory ///61166bb64799e9d0ec9f78bc44cc9d3d#$ I did a little debugging, and I found that the "uname -a" process is created under a let-binding of process-environment established in eshell-gather-process-output. This binding changes the PATH environment variable. I think maybe it's setting it to the remote path from the Tramp session, since our local directory in Eshell is /myssh:someremote:. This is a problem for Tramp, since it needs to start up a new "/bin/sh -i" process to create the connection to run "uname -a" on the remote host. When it starts the local shell process, it is now using the wrong executable path, and it cannot find myssh, since it is in a non-standard location. You can see this by tracing process-send-string and internal-default-process-filter before running "uname -a" in Eshell. When Tramp tries to send "myssh ..." to the /bin/sh process, it will get back an error saying myssh cannot be found. I think Tramp and/or Eshell need to make sure this /bin/sh subprocess is started with the local executable path and not the path from the remote host. There is a simple workaround: update your Tramp method's login program to use an absolute filename, e.g. /tmp/bin/myssh. Thanks! In GNU Emacs 29.1 Windowing system distributor 'Apple' System Description: macOS 14 Configured using: 'configure --with-ns '--enable-locallisppath=/Library/Application Support/Emacs/${version}/site-lisp:/Library/Application Support/Emacs/site-lisp' --with-modules 'CFLAGS=-DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT' --with-x-toolkit=no' Configured features: ACL GLIB GMP GNUTLS JPEG JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER ZLIB Important settings: value of $LANG: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: Eshell Minor modes in effect: eshell-prompt-mode: t eshell-hist-mode: t eshell-pred-mode: t eshell-cmpl-mode: t eshell-proc-mode: t eshell-arg-mode: t shell-dirtrack-mode: t tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils em-unix em-term term disp-table ehelp em-script em-prompt em-ls em-hist em-pred em-glob em-extpipe em-cmpl em-dirs esh-var em-basic em-banner em-alias esh-mode eshell esh-cmd generator esh-ext esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util dired-aux dired dired-loaddefs cl-extra pp cl-print tramp-adb tramp-archive tramp-cache time-stamp tramp-cmds tramp-container tramp-ftp tramp-gvfs url-util url-parse url-vars dbus xml tramp-sh thingatpt help-fns radix-tree help-mode tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat rx parse-time iso8601 time-date format-spec auth-source cl-seq eieio eieio-core cl-macs cl-loaddefs cl-lib password-cache json map byte-opt gv bytecomp byte-compile shell subr-x pcomplete comint ansi-osc ansi-color ring rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads kqueue cocoa ns multi-tty make-network-process emacs) Memory information: ((conses 16 99526 10654) (symbols 48 10616 0) (strings 32 37029 1504) (string-bytes 1 1188080) (vectors 16 22340) (vector-slots 8 297950 17878) (floats 8 64 26) (intervals 56 1230 0) (buffers 984 16))
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.