[Please CC me, I'm not subscribed to the list.] I find that multihop methods are not working since upgrading to CVS from 22. Below is an example using a one-hop multi-hop procedure which works with Emacs 22. It seems clear that "Tramp: Sending command ` && exit || exit'" is wrong. twb@Clio[Desktop]$ sudo -l User twb may run the following commands on this host: (ALL) NOPASSWD: ALL twb@Clio[Desktop]$ emacs -batch -Q -nw -eval '(load "tramp.el")' -f toggle-debug-on-error /sudo::/ Loading /usr/share/emacs/23.0.50/lisp/net/tramp.el.gz... uncompressing tramp.el.gz... uncompressing tramp.el.gz...done Debug on Error enabled globally Tramp: Opening connection for root@Clio.twb.ath.cx using sudo... Tramp: Waiting 60s for local shell to come up... Tramp: Sending command `sudo -u root -s -p Password: && exit || exit' Tramp: Waiting for prompts from remote shell Tramp: Found remote shell prompt on `Clio.twb.ath.cx' twb@Clio[Desktop]$ emacs -batch -Q -nw -eval '(load "tramp.el")' -f toggle-debug-on-error /multi:sudo:root@127.0.0.1:/ Loading /usr/share/emacs/23.0.50/lisp/net/tramp.el.gz... uncompressing tramp.el.gz... uncompressing tramp.el.gz...done Debug on Error enabled globally Tramp: Opening connection for sudo using multi... Tramp: Waiting 60s for local shell to come up... Tramp: Sending command ` && exit || exit' Tramp: Waiting for prompts from remote shell Tramp: Found remote shell prompt on `sudo' File error: Process has died ... (progn (setq value (progn ... ...)) (tramp-set-connection-property v uname value)) (if (eq value (quote undef)) (progn (setq value ...) (tramp-set-connection-property v uname value))) (when (eq value (quote undef)) (setq value (progn ... ...)) (tramp-set-connection-property v uname value)) (let ((value ...)) (when (eq value ...) (setq value ...) (tramp-set-connection-property v uname value)) value) (with-connection-property v uname (tramp-send-command v (format "cd %s; pwd" uname)) (with-current-buffer (tramp-get-buffer v) (goto-char ...) (buffer-substring ... ...))) (setq uname (with-connection-property v uname (tramp-send-command v ...) (with-current-buffer ... ... ...))) (let ((uname ...) (fname ...)) (when (and ... ...) (setq uname ...)) (setq uname (with-connection-property v uname ... ...)) (setq localname (concat uname fname))) (progn (let (... ...) (when ... ...) (setq uname ...) (setq localname ...))) (if (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname) (progn (let ... ... ... ...))) (when (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname) (let (... ...) (when ... ...) (setq uname ...) (setq localname ...))) (let* ((v ...) (method ...) (user ...) (host ...) (localname ...)) (unless (file-name-absolute-p localname) (setq localname ...)) (when (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname) (let ... ... ... ...)) (while (string-match "//" localname) (setq localname ...)) (tramp-let-maybe directory-sep-char 47 (let ... ...))) (with-parsed-tramp-file-name name nil (unless (file-name-absolute-p localname) (setq localname ...)) (when (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname) (let ... ... ... ...)) (while (string-match "//" localname) (setq localname ...)) (tramp-let-maybe directory-sep-char 47 (let ... ...))) (if (not (tramp-tramp-file-p name)) (tramp-run-real-handler (quote expand-file-name) (list name nil)) (with-parsed-tramp-file-name name nil (unless ... ...) (when ... ...) (while ... ...) (tramp-let-maybe directory-sep-char 47 ...))) tramp-handle-expand-file-name("/multi:sudo:root@127.0.0.1:/" "~/Desktop/") apply(tramp-handle-expand-file-name ("/multi:sudo:root@127.0.0.1:/" "~/Desktop/")) (if fn (apply (cdr fn) args) (tramp-run-real-handler operation args)) (let ((fn ...)) (if fn (apply ... args) (tramp-run-real-handler operation args))) (progn (let (...) (if fn ... ...))) (unwind-protect (progn (let ... ...)) (set-match-data save-match-data-internal (quote evaporate))) (let ((save-match-data-internal ...)) (unwind-protect (progn ...) (set-match-data save-match-data-internal ...))) (save-match-data (let (...) (if fn ... ...))) (let ((tramp-locker t)) (save-match-data (let ... ...))) (progn (setq tramp-locked t) (let (...) (save-match-data ...))) (unwind-protect (progn (setq tramp-locked t) (let ... ...)) (setq tramp-locked tl)) (let ((tl tramp-locked)) (unwind-protect (progn ... ...) (setq tramp-locked tl))) tramp-sh-file-name-handler(expand-file-name "/multi:sudo:root@127.0.0.1:/" "~/Desktop/") apply(tramp-sh-file-name-handler expand-file-name ("/multi:sudo:root@127.0.0.1:/" "~/Desktop/")) (cond ((and completion ... ...) t) ((and completion ... ...) filename) (foreign (apply foreign operation args)) (t (tramp-run-real-handler operation args))) (let* ((v ...) (method ...) (user ...) (host ...) (localname ...)) (cond (... t) (... filename) (foreign ...) (t ...))) (with-parsed-tramp-file-name filename nil (cond (... t) (... filename) (foreign ...) (t ...))) (let* ((filename ...) (completion ...) (foreign ...)) (with-parsed-tramp-file-name filename nil (cond ... ... ... ...))) (progn (let* (... ... ...) (with-parsed-tramp-file-name filename nil ...))) (unwind-protect (progn (let* ... ...)) (set-match-data save-match-data-internal (quote evaporate))) (let ((save-match-data-internal ...)) (unwind-protect (progn ...) (set-match-data save-match-data-internal ...))) (save-match-data (let* (... ... ...) (with-parsed-tramp-file-name filename nil ...))) tramp-file-name-handler(expand-file-name "/multi:sudo:root@127.0.0.1:/" "~/Desktop/") expand-file-name("/multi:sudo:root@127.0.0.1:/" "~/Desktop/") command-line-1(("-eval" "(load \"tramp.el\")" "-f" "toggle-debug-on-error" "/multi:sudo:root@127.0.0.1:/")) command-line() normal-top-level() In GNU Emacs 23.0.50.1 (i486-pc-linux-gnu, GTK+ Version 2.12.5) of 2008-01-21 on elegiac, modified by Debian (emacs-snapshot package, version 1:20080120-1) configured using `configure '--build' 'i486-linux-gnu' '--host' 'i486-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' '--localstatedir=/var' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes' '--enable-locallisppath=/etc/emacs-snapshot:/etc/emacs:/usr/local/share/emacs/23.0.50/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.0.50/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.0.50/leim' '--with-x=yes' '--with-x-toolkit=gtk' 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -DSITELOAD_PURESIZE_EXTRA=5000 -g -O2'' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: C value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: en_AU.utf8 locale-coding-system: utf-8 default-enable-multibyte-characters: t Major mode: Post Minor modes in effect: xterm-mouse-mode: t savehist-mode: t shell-dirtrack-mode: t icomplete-mode: t partial-completion-mode: t show-paren-mode: t delete-selection-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t unify-8859-on-encoding-mode: t utf-translate-cjk-mode: t auto-compression-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t Recent input: ESC < ESC > ESC x r e p o r t SPC e m a c s RET Recent messages: Loading /etc/emacs/site-start.d/51debian-el.el (source)...done Source file `/usr/share/emacs/23.0.50/lisp/ido.el' newer than byte-compiled file Loading subst-ksc...done Loading subst-gb2312...done Loading subst-big5...done Loading subst-jis...done For information about GNU Emacs and the GNU system, type C-h C-a. Modification-flag cleared When done with a buffer, type C-x # Mark set [2 times]