* net/tramp-sh.el (tramp-get-remote-path): Use a login shell in

order to determine `tramp-own-remote-path'.
This commit is contained in:
Michael Albinus 2014-12-10 14:15:51 +01:00
parent c2db939359
commit 935ee05f07
2 changed files with 36 additions and 21 deletions

View file

@ -1,3 +1,8 @@
2014-12-10 Michael Albinus <michael.albinus@gmx.de>
* net/tramp-sh.el (tramp-get-remote-path): Use a login shell in
order to determine `tramp-own-remote-path'.
2014-12-09 Fabián Ezequiel Gallina <fgallina@gnu.org> 2014-12-09 Fabián Ezequiel Gallina <fgallina@gnu.org>
* progmodes/python.el (python-shell-parse-command): Quote * progmodes/python.el (python-shell-parse-command): Quote

View file

@ -3847,6 +3847,18 @@ file exists and nonzero exit status otherwise."
(setq item (pop alist)) (setq item (pop alist))
(when (string-match (car item) shell) (when (string-match (car item) shell)
(setq extra-args (cdr item)))) (setq extra-args (cdr item))))
;; It is useful to set the prompt in the following command
;; because some people have a setting for $PS1 which /bin/sh
;; doesn't know about and thus /bin/sh will display a strange
;; prompt. For example, if $PS1 has "${CWD}" in the value, then
;; ksh will display the current working directory but /bin/sh
;; will display a dollar sign. The following command line sets
;; $PS1 to a sane value, and works under Bourne-ish shells as
;; well as csh-like shells. We also unset the variable $ENV
;; because that is read by some sh implementations (eg, bash
;; when called as sh) on startup; this way, we avoid the startup
;; file clobbering $PS1. $PROMPT_COMMAND is another way to set
;; the prompt in /bin/bash, it must be discarded as well.
(tramp-send-command (tramp-send-command
vec (format vec (format
"exec env ENV='' HISTFILE=/dev/null PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s" "exec env ENV='' HISTFILE=/dev/null PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s"
@ -3923,20 +3935,6 @@ seconds. If not, it produces an error message with the given ERROR-ARGS."
Mainly sets the prompt and the echo correctly. PROC is the shell Mainly sets the prompt and the echo correctly. PROC is the shell
process to set up. VEC specifies the connection." process to set up. VEC specifies the connection."
(let ((tramp-end-of-output tramp-initial-end-of-output)) (let ((tramp-end-of-output tramp-initial-end-of-output))
;; It is useful to set the prompt in the following command because
;; some people have a setting for $PS1 which /bin/sh doesn't know
;; about and thus /bin/sh will display a strange prompt. For
;; example, if $PS1 has "${CWD}" in the value, then ksh will
;; display the current working directory but /bin/sh will display
;; a dollar sign. The following command line sets $PS1 to a sane
;; value, and works under Bourne-ish shells as well as csh-like
;; shells. Daniel Pittman reports that the unusual positioning of
;; the single quotes makes it work under `rc', too. We also unset
;; the variable $ENV because that is read by some sh
;; implementations (eg, bash when called as sh) on startup; this
;; way, we avoid the startup file clobbering $PS1. $PROMPT_COMMAND
;; is another way to set the prompt in /bin/bash, it must be
;; discarded as well.
(tramp-open-shell (tramp-open-shell
vec vec
(or (tramp-get-connection-property vec "remote-shell" nil) (or (tramp-get-connection-property vec "remote-shell" nil)
@ -5025,13 +5023,25 @@ Return ATTR."
"/bin:/usr/bin") "/bin:/usr/bin")
"/bin:/usr/bin")))) "/bin:/usr/bin"))))
(own-remote-path (own-remote-path
;; We cannot apply `tramp-send-command-and-read' because
;; the login shell could return more than just the $PATH
;; string. So we emulate that function.
(when elt2 (when elt2
(condition-case nil (tramp-send-command
(tramp-send-command-and-read vec "echo \\\"$PATH\\\"") vec
(error (format
(tramp-message "%s -l %s 'echo \\\"$PATH\\\"'"
vec 3 "$PATH not set, ignoring `tramp-own-remote-path'.") (tramp-get-method-parameter
nil))))) (tramp-file-name-method vec) 'tramp-remote-shell)
(mapconcat
'identity
(tramp-get-method-parameter
(tramp-file-name-method vec) 'tramp-remote-shell-args)
" ")))
(with-current-buffer (tramp-get-connection-buffer vec)
(goto-char (point-max))
(forward-line -1)
(read (current-buffer))))))
;; Replace place holder `tramp-default-remote-path'. ;; Replace place holder `tramp-default-remote-path'.
(when elt1 (when elt1