Function: eshell/su

eshell/su is a byte-compiled function defined in em-tramp.el.gz.

Signature

(eshell/su &rest ARGS)

Documentation

Alias "su" to call Tramp.

Uses the system su through Tramp's su method.

Source Code

;; Defined in /usr/src/emacs/lisp/eshell/em-tramp.el.gz
(defun eshell/su (&rest args)
  "Alias \"su\" to call Tramp.

Uses the system su through Tramp's su method."
  (eshell-eval-using-options
   "su" args
   '((?h "help" nil nil "show this usage screen")
     (?l "login" nil login "provide a login environment")
     (?  nil nil login "provide a login environment")
     :usage "[- | -l | --login] [USER]
Become another USER during a login session.")
   (throw 'eshell-replace-command
          (let ((user "root")
                (host (or (file-remote-p default-directory 'host)
                          tramp-default-host))
                (dir (file-local-name (expand-file-name default-directory)))
                (prefix (file-remote-p default-directory)))
            (dolist (arg args)
              (if (string-equal arg "-") (setq login t) (setq user arg)))
            (when login (setq dir "~/"))
            (if (and prefix
                     (or
                      (not (string-equal
                            "su" (file-remote-p default-directory 'method)))
                      (not (string-equal
                            user (file-remote-p default-directory 'user)))))
                (eshell-parse-command
                 "cd" (list (format "%s|su:%s@%s:%s"
                                    (substring prefix 0 -1) user host dir)))
              (eshell-parse-command
               "cd" (list (format "/su:%s@%s:%s" user host dir))))))))