summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/net/tramp-sh.el20
1 files changed, 16 insertions, 4 deletions
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index e4ec735a96c..14ae2cb51b4 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -3885,10 +3885,22 @@ This function expects to be in the right *tramp* buffer."
I.e., for each directory in `tramp-remote-path', it is tested
whether it exists and if so, it is added to the environment
variable PATH."
- (tramp-message vec 5 "Setting $PATH environment variable")
- (tramp-send-command
- vec (format "PATH=%s; export PATH"
- (mapconcat 'identity (tramp-get-remote-path vec) ":"))))
+ (let ((path (mapconcat 'identity (tramp-get-remote-path vec) ":"))
+ (path-max
+ (with-tramp-connection-property vec "path-max"
+ (tramp-send-command-and-read vec "getconf PATH_MAX /")))
+ index)
+ (tramp-message vec 5 "Setting $PATH environment variable")
+ (unless (< (length path) path-max)
+ (setq index path-max)
+ (while (not (string-equal (substring path (1- index) index) ":"))
+ (setq index (1- index)))
+ ;; FIXME: Is this sufficient? Or shall we raise an error?
+ (tramp-message
+ vec 2 "$PATH environment variable is too long. Ignoring \"%s\""
+ (substring path index))
+ (setq path (substring path 0 (1- index))))
+ (tramp-send-command vec (format "PATH=%s; export PATH" path))))
;; ------------------------------------------------------------
;; -- Communication with external shell --