Subject: bug#23032: 25.0.91; Eshell misinterprets TRAMP multi-hop paths as pipes

From: William G. Gardella <[email-masked]>
Date: Wed, 16 Mar 2016 16:21:54 +0000

Steps to reproduce:

1. M-x eshell

2. Type a TRAMP path that makes an ad-hoc multi-hop connection,
   such as:

   cd /sshx:user@host|sudo:root@host:

3. Eshell responds "sudo:root@host:: command not found"

4. Type the same TRAMP path, but wrapped in quotes:

   cd "/sshx:user@host|sudo:root@host:"

5. Eshell successfully navigates to the path.

It seems that eshell too eagerly notices the pipe character
and assumes that it's reading a piped command line,
rather than first noticing that the character is inside a TRAMP path.

In GNU Emacs 25.0.91.1 (x86_64-slackware-linux-gnu)
 of 2016-02-16 built on eris
Windowing system distributor 'The X.Org Foundation', version 11.0.11403000
Configured using:
 'configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
 --program-prefix= --program-suffix= --mandir=/usr/man
 --infodir=/usr/info --without-gconf --without-gsettings --with-x
 --with-x-toolkit=no --build=x86_64-slackware-linux 'CFLAGS=-O2
 -fPIC''

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS NOTIFY ACL
GNUTLS LIBXML2 FREETYPE XFT ZLIB X11

Important settings:
  value of $LC_COLLATE: C
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=exim
  locale-coding-system: utf-8-unix

Major mode: ERC

Minor modes in effect:
  erc-services-mode: t
  erc-autoaway-mode: t
  xterm-mouse-mode: t
  winner-mode: t
  type-break-mode: t
  magit-wip-before-change-mode: t
  magit-wip-after-apply-mode: t
  magit-wip-after-save-mode: t
  diff-auto-refine-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  shell-dirtrack-mode: t
  async-bytecomp-package-mode: t
  electric-pair-mode: t
  erc-list-mode: t
  erc-menu-mode: t
  erc-autojoin-mode: t
  erc-ring-mode: t
  erc-networks-mode: t
  erc-pcomplete-mode: t
  erc-match-mode: t
  erc-netsplit-mode: t
  erc-hl-nicks-mode: t
  erc-button-mode: t
  erc-fill-mode: t
  erc-stamp-mode: t
  erc-irccontrols-mode: t
  erc-noncommands-mode: t
  erc-keep-place-mode: t
  erc-move-to-prompt-mode: t
  erc-readonly-mode: t
  pdf-occur-global-minor-mode: t
  display-time-mode: t
  savehist-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  transient-mark-mode: t

Recent messages:
Logging in as `wgreenhouse'...
Logging in without password
Connecting to 127.0.0.1:9999... 
Type "q" in help window to restore previous buffer.
Logging in as ‘wgreenhouse’... done
Type "q" in help window to restore previous buffer.
Connecting to 127.0.0.1:9999... ...done
Logging in as `wgreenhouse'...
Logging in without password
Logging in as ‘wgreenhouse’... done

Load-path shadows:
~/git/org-mode/contrib/lisp/org-mime hides /home/wgg/.emacs.d/elpa/org-mime-20120112/org-mime
/usr/share/emacs/site-lisp/t-mouse hides /usr/share/emacs/25.0.91/lisp/t-mouse
~/git/org-mode/lisp/ob-screen hides /usr/share/emacs/25.0.91/lisp/org/ob-screen
~/git/org-mode/lisp/ob-C hides /usr/share/emacs/25.0.91/lisp/org/ob-C
~/git/org-mode/lisp/org-capture hides /usr/share/emacs/25.0.91/lisp/org/org-capture
~/git/org-mode/lisp/org-w3m hides /usr/share/emacs/25.0.91/lisp/org/org-w3m
~/git/org-mode/lisp/org-eshell hides /usr/share/emacs/25.0.91/lisp/org/org-eshell
~/git/org-mode/lisp/org-clock hides /usr/share/emacs/25.0.91/lisp/org/org-clock
~/git/org-mode/lisp/org-gnus hides /usr/share/emacs/25.0.91/lisp/org/org-gnus
~/git/org-mode/lisp/org-indent hides /usr/share/emacs/25.0.91/lisp/org/org-indent
~/git/org-mode/lisp/ox-texinfo hides /usr/share/emacs/25.0.91/lisp/org/ox-texinfo
~/git/org-mode/lisp/org-macs hides /usr/share/emacs/25.0.91/lisp/org/org-macs
~/git/org-mode/lisp/ob-java hides /usr/share/emacs/25.0.91/lisp/org/ob-java
~/git/org-mode/lisp/ox-ascii hides /usr/share/emacs/25.0.91/lisp/org/ox-ascii
~/git/org-mode/lisp/ob-octave hides /usr/share/emacs/25.0.91/lisp/org/ob-octave
~/git/org-mode/lisp/org-bbdb hides /usr/share/emacs/25.0.91/lisp/org/org-bbdb
~/git/org-mode/lisp/ob-latex hides /usr/share/emacs/25.0.91/lisp/org/ob-latex
~/git/org-mode/lisp/org-plot hides /usr/share/emacs/25.0.91/lisp/org/org-plot
~/git/org-mode/lisp/ox-man hides /usr/share/emacs/25.0.91/lisp/org/ox-man
~/git/org-mode/lisp/org-id hides /usr/share/emacs/25.0.91/lisp/org/org-id
~/git/org-mode/lisp/ob-sass hides /usr/share/emacs/25.0.91/lisp/org/ob-sass
~/git/org-mode/lisp/org-datetree hides /usr/share/emacs/25.0.91/lisp/org/org-datetree
~/git/org-mode/lisp/ox hides /usr/share/emacs/25.0.91/lisp/org/ox
~/git/org-mode/lisp/ob-org hides /usr/share/emacs/25.0.91/lisp/org/ob-org
~/git/org-mode/lisp/org-timer hides /usr/share/emacs/25.0.91/lisp/org/org-timer
~/git/org-mode/lisp/org-attach hides /usr/share/emacs/25.0.91/lisp/org/org-attach
~/git/org-mode/lisp/org-mouse hides /usr/share/emacs/25.0.91/lisp/org/org-mouse
~/git/org-mode/lisp/ob-R hides /usr/share/emacs/25.0.91/lisp/org/ob-R
~/git/org-mode/lisp/ob-awk hides /usr/share/emacs/25.0.91/lisp/org/ob-awk
~/git/org-mode/lisp/ob-perl hides /usr/share/emacs/25.0.91/lisp/org/ob-perl
~/git/org-mode/lisp/org-colview hides /usr/share/emacs/25.0.91/lisp/org/org-colview
~/git/org-mode/lisp/ob-comint hides /usr/share/emacs/25.0.91/lisp/org/ob-comint
~/git/org-mode/lisp/org-mobile hides /usr/share/emacs/25.0.91/lisp/org/org-mobile
~/git/org-mode/lisp/ob-mscgen hides /usr/share/emacs/25.0.91/lisp/org/ob-mscgen
~/git/org-mode/lisp/ob-haskell hides /usr/share/emacs/25.0.91/lisp/org/ob-haskell
~/git/org-mode/lisp/ob-table hides /usr/share/emacs/25.0.91/lisp/org/ob-table
~/git/org-mode/lisp/ob-ocaml hides /usr/share/emacs/25.0.91/lisp/org/ob-ocaml
~/git/org-mode/lisp/ox-icalendar hides /usr/share/emacs/25.0.91/lisp/org/ox-icalendar
~/git/org-mode/lisp/org-pcomplete hides /usr/share/emacs/25.0.91/lisp/org/org-pcomplete
~/git/org-mode/lisp/org-agenda hides /usr/share/emacs/25.0.91/lisp/org/org-agenda
~/git/org-mode/lisp/ob-ditaa hides /usr/share/emacs/25.0.91/lisp/org/ob-ditaa
~/git/org-mode/lisp/org-faces hides /usr/share/emacs/25.0.91/lisp/org/org-faces
~/git/org-mode/lisp/org-ctags hides /usr/share/emacs/25.0.91/lisp/org/org-ctags
~/git/org-mode/lisp/org hides /usr/share/emacs/25.0.91/lisp/org/org
~/git/org-mode/lisp/ob-picolisp hides /usr/share/emacs/25.0.91/lisp/org/ob-picolisp
~/git/org-mode/lisp/ob-exp hides /usr/share/emacs/25.0.91/lisp/org/ob-exp
~/git/org-mode/lisp/ob-core hides /usr/share/emacs/25.0.91/lisp/org/ob-core
~/git/org-mode/lisp/ox-publish hides /usr/share/emacs/25.0.91/lisp/org/ox-publish
~/git/org-mode/lisp/ob hides /usr/share/emacs/25.0.91/lisp/org/ob
~/git/org-mode/lisp/org-compat hides /usr/share/emacs/25.0.91/lisp/org/org-compat
~/git/org-mode/lisp/ob-io hides /usr/share/emacs/25.0.91/lisp/org/ob-io
~/git/org-mode/lisp/ob-scala hides /usr/share/emacs/25.0.91/lisp/org/ob-scala
~/git/org-mode/lisp/org-irc hides /usr/share/emacs/25.0.91/lisp/org/org-irc
~/git/org-mode/lisp/ob-plantuml hides /usr/share/emacs/25.0.91/lisp/org/ob-plantuml
~/git/org-mode/lisp/ob-maxima hides /usr/share/emacs/25.0.91/lisp/org/ob-maxima
~/git/org-mode/lisp/ob-clojure hides /usr/share/emacs/25.0.91/lisp/org/ob-clojure
~/git/org-mode/lisp/ob-emacs-lisp hides /usr/share/emacs/25.0.91/lisp/org/ob-emacs-lisp
~/git/org-mode/lisp/ob-tangle hides /usr/share/emacs/25.0.91/lisp/org/ob-tangle
~/git/org-mode/lisp/ob-asymptote hides /usr/share/emacs/25.0.91/lisp/org/ob-asymptote
~/git/org-mode/lisp/ob-sql hides /usr/share/emacs/25.0.91/lisp/org/ob-sql
~/git/org-mode/lisp/org-bibtex hides /usr/share/emacs/25.0.91/lisp/org/org-bibtex
~/git/org-mode/lisp/org-src hides /usr/share/emacs/25.0.91/lisp/org/org-src
~/git/org-mode/lisp/ob-sqlite hides /usr/share/emacs/25.0.91/lisp/org/ob-sqlite
~/git/org-mode/lisp/org-mhe hides /usr/share/emacs/25.0.91/lisp/org/org-mhe
~/git/org-mode/lisp/ob-lisp hides /usr/share/emacs/25.0.91/lisp/org/ob-lisp
~/git/org-mode/lisp/ob-makefile hides /usr/share/emacs/25.0.91/lisp/org/ob-makefile
~/git/org-mode/lisp/ob-python hides /usr/share/emacs/25.0.91/lisp/org/ob-python
~/git/org-mode/lisp/org-habit hides /usr/share/emacs/25.0.91/lisp/org/org-habit
~/git/org-mode/lisp/org-archive hides /usr/share/emacs/25.0.91/lisp/org/org-archive
~/git/org-mode/lisp/ob-ledger hides /usr/share/emacs/25.0.91/lisp/org/ob-ledger
~/git/org-mode/lisp/org-crypt hides /usr/share/emacs/25.0.91/lisp/org/org-crypt
~/git/org-mode/lisp/org-list hides /usr/share/emacs/25.0.91/lisp/org/org-list
~/git/org-mode/lisp/org-table hides /usr/share/emacs/25.0.91/lisp/org/org-table
~/git/org-mode/lisp/org-info hides /usr/share/emacs/25.0.91/lisp/org/org-info
~/git/org-mode/lisp/ob-js hides /usr/share/emacs/25.0.91/lisp/org/ob-js
~/git/org-mode/lisp/ox-html hides /usr/share/emacs/25.0.91/lisp/org/ox-html
~/git/org-mode/lisp/ob-ruby hides /usr/share/emacs/25.0.91/lisp/org/ob-ruby
~/git/org-mode/lisp/ox-md hides /usr/share/emacs/25.0.91/lisp/org/ox-md
~/git/org-mode/lisp/ox-latex hides /usr/share/emacs/25.0.91/lisp/org/ox-latex
~/git/org-mode/lisp/ob-fortran hides /usr/share/emacs/25.0.91/lisp/org/ob-fortran
~/git/org-mode/lisp/ox-org hides /usr/share/emacs/25.0.91/lisp/org/ox-org
~/git/org-mode/lisp/ob-css hides /usr/share/emacs/25.0.91/lisp/org/ob-css
~/git/org-mode/lisp/org-rmail hides /usr/share/emacs/25.0.91/lisp/org/org-rmail
~/git/org-mode/lisp/ob-ref hides /usr/share/emacs/25.0.91/lisp/org/ob-ref
~/git/org-mode/lisp/ob-calc hides /usr/share/emacs/25.0.91/lisp/org/ob-calc
~/git/org-mode/lisp/org-inlinetask hides /usr/share/emacs/25.0.91/lisp/org/org-inlinetask
~/git/org-mode/lisp/org-element hides /usr/share/emacs/25.0.91/lisp/org/org-element
~/git/org-mode/lisp/org-docview hides /usr/share/emacs/25.0.91/lisp/org/org-docview
~/git/org-mode/lisp/ox-beamer hides /usr/share/emacs/25.0.91/lisp/org/ox-beamer
~/git/org-mode/lisp/ob-lob hides /usr/share/emacs/25.0.91/lisp/org/ob-lob
~/git/org-mode/lisp/ob-eval hides /usr/share/emacs/25.0.91/lisp/org/ob-eval
~/git/org-mode/lisp/org-protocol hides /usr/share/emacs/25.0.91/lisp/org/org-protocol
~/git/org-mode/lisp/ob-shen hides /usr/share/emacs/25.0.91/lisp/org/ob-shen
~/git/org-mode/lisp/org-entities hides /usr/share/emacs/25.0.91/lisp/org/org-entities
~/git/org-mode/lisp/ox-odt hides /usr/share/emacs/25.0.91/lisp/org/ox-odt
~/git/org-mode/lisp/ob-scheme hides /usr/share/emacs/25.0.91/lisp/org/ob-scheme
~/git/org-mode/lisp/ob-keys hides /usr/share/emacs/25.0.91/lisp/org/ob-keys
~/git/org-mode/lisp/ob-gnuplot hides /usr/share/emacs/25.0.91/lisp/org/ob-gnuplot
~/git/org-mode/lisp/ob-dot hides /usr/share/emacs/25.0.91/lisp/org/ob-dot
~/git/org-mode/lisp/ob-matlab hides /usr/share/emacs/25.0.91/lisp/org/ob-matlab
~/git/org-mode/lisp/org-macro hides /usr/share/emacs/25.0.91/lisp/org/org-macro
~/git/org-mode/lisp/org-footnote hides /usr/share/emacs/25.0.91/lisp/org/org-footnote
~/git/org-mode/lisp/ob-lilypond hides /usr/share/emacs/25.0.91/lisp/org/ob-lilypond
~/git/org-mode/lisp/org-feed hides /usr/share/emacs/25.0.91/lisp/org/org-feed
~/git/org-mode/lisp/org-version hides /usr/share/emacs/25.0.91/lisp/org/org-version
~/git/org-mode/lisp/org-loaddefs hides /usr/share/emacs/25.0.91/lisp/org/org-loaddefs
~/git/org-mode/lisp/org-install hides /usr/share/emacs/25.0.91/lisp/org/org-install
/usr/share/emacs/site-lisp/emms/tq hides /usr/share/emacs/25.0.91/lisp/emacs-lisp/tq
/usr/share/emacs/25.0.91/lisp/emacs-lisp/cl-generic hides /home/wgg/.emacs.d/elpa/cl-generic-0.2/cl-generic

Features:
(shadow sort gnus-cite mail-extr nnir emacsbug sendmail gnus-topic
gnus-delay gnus-draft utf-7 nndraft nnmh nnfolder nnmaildir gnus-agent
gnus-srvr gnus-score score-mode nnvirtual gnus-msg gnus-art mm-uu
mml2015 mm-view mml-smime smime dig mailcap nntp gnus-cache gnus-sum
gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source
utf7 netrc nnoo parse-time gnus-spec gnus-int gnus-range gnus-win gnus
gnus-ems nnheader tramp-cache browse-url eieio-opt speedbar sb-image
ezimage dframe tabify man windmove network-stream nsm starttls tls
gnutls epa-file epa em-unix em-term term disp-table ehelp em-smart
em-script em-prompt em-ls em-hist em-pred em-glob em-dirs em-cmpl
em-basic em-banner em-alias esh-var esh-io esh-cmd esh-opt esh-ext
esh-proc esh-arg esh-groups eshell esh-module esh-mode esh-util view
exim xcb-xim xcb-xlib whitespace rainbow-delimiters erc-services
erc-autoaway xt-mouse winner type-break symon battery shackle
magit-wip magit-log magit-diff smerge-mode diff-mode git-commit
log-edit message idna rfc822 mml mml-sec epg mm-decode mm-bodies
mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev
mail-utils gmm-utils mailheader pcvs-util add-log magit-core
magit-autorevert autorevert filenotify magit-process with-editor
tramp-sh tramp tramp-compat tramp-loaddefs trampver ucs-normalize
shell magit-popup easy-mmode async-bytecomp async magit-mode magit-git
crm magit-section magit-utils dash elec-pair org-loaddefs
sauron-identica sauron-jabber sauron-twittering sauron-notifications
notifications sauron-org appt diary-lib diary-loaddefs sauron-dbus
dbus xml sauron-erc erc-list erc-menu erc-join erc-ring erc-networks
erc-pcomplete pcomplete erc-track erc-match erc-netsplit erc-hl-nicks
color erc-button erc-fill erc-stamp erc-goodies erc erc-backend
erc-compat auth-source gnus-util mm-util help-fns mail-prsvr
password-cache thingatpt sauron pdf-occur ibuf-ext ibuffer tablist
tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local find-func cedet dired
pdf-isearch let-alist pdf-misc imenu pdf-tools compile comint
ansi-color ring cus-edit cus-start cus-load wid-edit pdf-view bookmark
pp jka-compr pdf-cache pdf-info tq pdf-util advice format-spec
image-mode exwm-randr xcb-randr exwm-config ido seq exwm exwm-input
xcb-keysyms exwm-manage exwm-floating xcb-cursor xcb-render
exwm-layout exwm-workspace exwm-core derived xcb-ewmh xcb-icccm xcb
xcb-xproto xcb-types cl-seq edmacro kmacro
sanityinc-tomorrow-day-theme color-theme-sanityinc-tomorrow
theme-changer solar cal-dst cal-menu calendar cal-loaddefs cl time
saveplace savehist server finder-inf eieio byte-opt bytecomp
byte-compile cl-extra help-mode cconv eieio-core cl-macs gv
cl-loaddefs pcase cl-lib info package easymenu epg-config time-date
mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel x-win term/common-win x-dnd tool-bar dnd
fontset image regexp-opt fringe tabulated-list newcomment elisp-mode
lisp-mode prog-mode register page menu-bar rfn-eshadow timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame
cl-generic 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 charscript
case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote dbusbind inotify
dynamic-setting font-render-setting x multi-tty make-network-process
emacs)

Memory information:
((conses 16 1031607 243061)
 (symbols 48 164450 2)
 (miscs 40 885 2418)
 (strings 32 462013 52277)
 (string-bytes 1 23793062)
 (vectors 16 202179)
 (vector-slots 8 2453195 207435)
 (floats 8 2632 486)
 (intervals 56 13394 1871)
 (buffers 976 69)
 (heap 1024 179153 7388))