summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/net/tramp-sh.el19
2 files changed, 18 insertions, 7 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 41c68d7fbee..055ec17160e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2014-10-14 Jérémy Compostella <jeremy.compostella@intel.com>
+ Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+ Reduce the amount of set environment variable commands.
+
2014-10-12 Fabián Ezequiel Gallina <fgallina@gnu.org>
Fix import completion. (Bug#18582)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 65b64233e5c..ce5e2faff50 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -3955,10 +3955,8 @@ process to set up. VEC specifies the connection."
(tramp-message vec 5 "Setting shell prompt")
(tramp-send-command
- vec (format "PS1=%s" (tramp-shell-quote-argument tramp-end-of-output)) t)
- (tramp-send-command vec "PS2=''" t)
- (tramp-send-command vec "PS3=''" t)
- (tramp-send-command vec "PROMPT_COMMAND=''" t)
+ vec (format "PS1=%s PS2='' PS3='' PROMPT_COMMAND=''"
+ (tramp-shell-quote-argument tramp-end-of-output)) t)
;; Try to set up the coding system correctly.
;; CCC this can't be the right way to do it. Hm.
@@ -4078,15 +4076,22 @@ process to set up. VEC specifies the connection."
(let ((env (append (when (tramp-get-remote-locale vec) ; Discard `(nil)'.
`(,(tramp-get-remote-locale vec)))
(copy-sequence tramp-remote-process-environment)))
- unset item)
+ unset vars item)
(while env
(setq item (tramp-compat-split-string (car env) "="))
(setcdr item (mapconcat 'identity (cdr item) "="))
(if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
- (tramp-send-command
- vec (format "%s=%s; export %s" (car item) (cdr item) (car item)) t)
+ (push (format "%s %s" (car item) (cdr item)) vars)
(push (car item) unset))
(setq env (cdr env)))
+ (when vars
+ (tramp-send-command
+ vec
+ (format "while read var val; do export $var=$val; done <<'%s'\n%s\n%s"
+ tramp-end-of-heredoc
+ (mapconcat 'identity vars "\n")
+ tramp-end-of-heredoc)
+ t))
(when unset
(tramp-send-command
vec (format "unset %s" (mapconcat 'identity unset " ")) t))))