From 1e92a8a3aa7958ba699cd0430be4f23aff6c4c01 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 21 Mar 2014 14:02:25 +0100 Subject: [PATCH] * net/tramp.el (tramp-methods): Add docstring for `tramp-login-env' and `tramp-copy-env'. * net/tramp-sh.el (tramp-methods) : Add `tramp-login-env'. (tramp-maybe-open-connection): Handle `tramp-login-env'. --- lisp/ChangeLog | 8 ++++++++ lisp/net/tramp-sh.el | 23 +++++++++++++++++++++++ lisp/net/tramp.el | 6 ++++++ 3 files changed, 37 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 019c63c5155..4839c191ba6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2014-03-21 Michael Albinus + + * net/tramp.el (tramp-methods): Add docstring for `tramp-login-env' + and `tramp-copy-env'. + + * net/tramp-sh.el (tramp-methods) : Add `tramp-login-env'. + (tramp-maybe-open-connection): Handle `tramp-login-env'. + 2014-03-21 Glenn Morris * electric.el (electric-indent-post-self-insert-function): Add doc. diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 245d4f1ae8b..106c14805d5 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -227,6 +227,8 @@ detected as prompt when being sent on echoing hosts, therefore.") '("sudo" (tramp-login-program "sudo") (tramp-login-args (("-u" "%u") ("-s") ("-H") ("-p" "Password:"))) + ;; Local $SHELL could be a nasty one, like zsh or fish. Let's override it. + (tramp-login-env (("SHELL") ("/bin/sh"))) (tramp-remote-shell "/bin/sh") (tramp-remote-shell-args ("-c")) (tramp-connection-timeout 10))) @@ -4492,6 +4494,9 @@ connection if a previous connection has died for some reason." (login-args (tramp-get-method-parameter l-method 'tramp-login-args)) + (login-env + (tramp-get-method-parameter + l-method 'tramp-login-env)) (async-args (tramp-get-method-parameter l-method 'tramp-async-args)) @@ -4549,6 +4554,24 @@ connection if a previous connection has died for some reason." tramp-current-user (or g-user l-user) tramp-current-host (or g-host l-host)) + ;; Add login environment. + (when login-env + (setq + login-env + (mapcar + (lambda (x) + (setq x (mapcar (lambda (y) (format-spec y spec)) x)) + (unless (member "" x) (mapconcat 'identity x " "))) + login-env)) + (while login-env + (setq command + (format + "%s=%s %s" + (pop login-env) + (tramp-shell-quote-argument (pop login-env)) + command))) + (setq command (concat "env " command))) + ;; Replace `login-args' place holders. (setq l-host (or l-host "") diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 5ff68e0f0f9..b9b64ed70f8 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -230,6 +230,9 @@ pair of the form (KEY VALUE). The following KEYs are defined: `tramp-make-tramp-temp-file'. \"%k\" indicates the keep-date parameter of a program, if exists. \"%c\" adds additional `tramp-ssh-controlmaster-options' options for the first hop. + * `tramp-login-env' + A list of environment variables and their values, which will + be set when calling `tramp-login-program'. * `tramp-async-args' When an asynchronous process is started, we know already that the connection works. Therefore, we can pass additional @@ -242,6 +245,9 @@ pair of the form (KEY VALUE). The following KEYs are defined: * `tramp-copy-args' This specifies the list of parameters to pass to the above mentioned program, the hints for `tramp-login-args' also apply here. + * `tramp-copy-env' + A list of environment variables and their values, which will + be set when calling `tramp-copy-program'. * `tramp-copy-keep-date' This specifies whether the copying program when the preserves the timestamp of the original file. -- 2.39.2