【问题标题】:What setup file does eshell (elisp shell) read when it starts? How eshell sets its PATH?eshell(elisp shell)启动时会读取什么设置文件? eshell如何设置它的PATH?
【发布时间】:2011-04-07 00:15:58
【问题描述】:

在 emacs/eshell 中,“echo $PATH”显示的路径与 $PATH 环境变量不同。

我还检查了 eshell 没有读取 .bashrc 或 .profile,我认为这就是路径不同的原因。

  • eshell 启动时会读取什么设置文件?
  • eshell 如何设置其 PATH?
  • 如何让eshell的PATH与环境变量的PATH一致?

添加

正如 Jérôme Radix 指出的那样,PATH 取决于我如何启动 Aquamcs。

  • 当我单击按钮启动 Aquamacs 时,它具有不同的 PATH。
  • 当我从命令行运行“aquamacs”时,它具有相同的 PATH。

【问题讨论】:

  • 奇怪,我的 emacs 和终端显示相同的内容。

标签: emacs eshell


【解决方案1】:
  • eshell 启动时会读取什么设置文件?

启动时不执行安装文件。读取以下文件以定义初始历史记录和最后目录:

~/.eshell/history
~/.eshell/lastdir
  • eshell 如何设置它的 PATH?

在 esh-util.el 中,第 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.")
  • 如何让eshell的PATH和环境变量的PATH一样?

与emacs进程的PATH变量相同。我想你在 emacs 之外的 shell 上做一个 echo $PATH 来比较。如果 emacs 和您在 emacs 之外的 shell 之间的 PATH 不同,那是因为 emacs 和您的 shell 不执行相同的启动脚本。

【讨论】:

  • 你能举个例子说明如何启动emacs,让bash和eshell使用bashrc文件吗?他们的语法不一样吗?他们怎么可能使用同一个文件?
【解决方案2】:

由于您使用的是 Mac,因此了解 GUI 应用程序(例如未从终端打开时的 Aquamacs)从 ~/.MacOSX/environment.plist 获取其环境非常重要,因此您可以在那里进行更改。请特别参阅 this article by Brian D Foy 了解自动构建此文件的方法。

【讨论】:

【解决方案3】:

根据定义,echo $PATH 显示PATH 环境变量的值。在 Emacs 中运行的 shell 从正在运行的 Emacs 进程中继承了PATH 环境变量。

eshell 中运行的shell 不是像bash 那样的独立程序,它内置在Emacs 中。它的定制是通过 Emacs Lisp 完成的。特别是,当 eshell 启动时,它会运行 eshell-mode-hook 中的函数并加载 eshell-modules-list 中的 Lisp 文件。

您似乎没有在正确的配置文件中设置PATH。正确的地方应该是在您的会话开始时完成的事情。这取决于操作系统;如果您对此有任何疑问,请在Super User 上提问,确保说明您的操作系统是什么,如果适用,请说明您的登录 shell、桌面环境等。

【讨论】:

  • M-x shell 或 M-x ansi-term 工作正常,但不适用于 eshell。我几乎可以肯定 eshell 不会加载 .bashrc。
  • @prosseek:是的,抱歉,eshell 不运行 bash,所以它不加载 .bashrc。如果您在.bashrc 中设置PATH,这将解释您遇到问题的原因。这就是为什么.bashrc 不是设置PATH(或任何环境变量)的正确位置的原因之一;见我的最后一段。
猜你喜欢
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
相关资源
最近更新 更多