diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 019c63c51554f9830a7ae3ab51b2868035f64f8e..4839c191ba6117024c03d2212bf1fffd66c0b21f 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 245d4f1ae8b4289ba37e65ab2534bea8aee35bd7..106c14805d5a64e3ab6d6294c20ef15550b9dee2 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 5ff68e0f0f90bc85fb914d946f952ab704efb848..b9b64ed70f82c912ce342668e183646683aca501 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.