$FreeBSD$ From the commit r117653, bug #18858 === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2014-11-01 13:34:45 +0000 +++ lisp/ChangeLog 2014-11-01 14:08:00 +0000 @@ -1,3 +1,8 @@ +2014-11-01 Wolfgang Jenkner + + * net/tramp-sh.el (tramp-send-command): Fix the case where the + remote-echo connection property is non-nil (bug#18858). + 2014-11-01 Michael Albinus Backport Tramp changes from trunk. === modified file 'lisp/net/tramp-sh.el' --- lisp/net/tramp-sh.el 2014-11-01 13:34:45 +0000 +++ lisp/net/tramp-sh.el 2014-11-01 14:08:00 +0000 @@ -4769,6 +4769,17 @@ (when (tramp-get-connection-property p "remote-echo" nil) ;; We mark the command string that it can be erased in the output buffer. (tramp-set-connection-property p "check-remote-echo" t) + ;; If we put `tramp-echo-mark' after a trailing newline (which + ;; is assumed to be unquoted) `tramp-send-string' doesn't see + ;; that newline and adds `tramp-rsh-end-of-line' right after + ;; `tramp-echo-mark', so the remote shell sees two consecutive + ;; trailing line endings and sends two prompts after executing + ;; the command, which confuses `tramp-wait-for-output'. + (when (and (not (string= command "")) + (string-equal (substring command -1) "\n")) + (setq command (substring command 0 -1))) + ;; No need to restore a trailing newline here since `tramp-send-string' + ;; makes sure that the string ends in `tramp-rsh-end-of-line', anyway. (setq command (format "%s%s%s" tramp-echo-mark command tramp-echo-mark))) ;; Send the command. (tramp-message vec 6 "%s" command)