10
votes

With emacs/eshell, the "echo $PATH" shows different paths than that of $PATH environment variable.

And I also checked that eshell doesn't read .bashrc or .profile, and I think that's the reason why the path is different.

  • What setup file does eshell read when it starts?
  • How eshell sets its PATH?
  • How to make the eshell's PATH the same as the environment variable's PATH?

ADDED

As Jérôme Radix pointed out, the PATH depends on how I start the Aquamcs.

  • When I click the button to start Aquamacs, it has different PATH.
  • When I run 'aquamacs' from the command line, it has the same PATH.
3
Strange, my emacs and terminal show same content.phimuemue

3 Answers

6
votes
  • What setup file does eshell read when it starts?

No setup file is executed at startup. The following files are read to define the initial history and last directories :

~/.eshell/history
~/.eshell/lastdir
  • How eshell sets its PATH?

In esh-util.el, line 240 :

(defvar eshell-path-env (getenv "PATH")
  "Content of $PATH.
It might be different from \(getenv \"PATH\"\), when
`default-directory' points to a remote host.")
  • How to make the eshell's PATH the same as the environment variable's PATH?

It is the same as the PATH variable of the emacs process. I imagine that you do a echo $PATH on a shell outside emacs to compare. If PATH are differents between emacs and your shell outside emacs it is because emacs and your shell does not execute the same startup scripts.

5
votes

Since you are on a Mac, it's important to know that GUI applications (such as Aquamacs when not opened from a terminal) get their environment from ~/.MacOSX/environment.plist, so you can make changes there. See in particular this article by Brian D Foy for a way to build this file automatically.

1
votes

By definition, echo $PATH shows the value of the PATH environment variable. The shell running inside Emacs inherits the PATH environment variable from the running Emacs process.

<EDIT> The shell running in eshell is not a separate program like bash, it's built into Emacs. Its customization is done through Emacs Lisp. In particular, when eshell starts, it runs the functions in eshell-mode-hook and loads the Lisp files in eshell-modules-list. </EDIT>

It looks like you're not setting PATH in the right configuration file. The right place would be something that's done at the start of your session. This is operating system-dependent; if you have trouble with that, ask on Super User, making sure to say what your operating system is, and if applicable indicate your login shell, desktop environment, etc.