我观察到的情况:
当我输入emacs
gnome-terminal 时,它会在相同的环境中启动,并在 中设置变量.bashrc
。如果我使用命令的键盘快捷键emacs
,它会在没有这些变量的环境中打开。
问题:
- 这种行为有什么原因吗?
- 我怎样才能让 emacs 在具有 设置的环境中打开
.bashrc
? - 如果我有 root 访问权限,我可以将这些变量设置为“系统范围”吗?
其他背景:我需要能够从 R 内部访问变量,如相关 SO 问题中所述(如何在 emacs 中的 R 中访问 bash 环境变量),并且我还需要 Auctex 的 texlive 发行版的路径。当前的问题有所不同,因为我更感兴趣的是从终端内启动 emacs 和从应用程序菜单、Gnome-do 或调用 或 的键盘快捷键启动 emacs 之间的emacs
区别/usr/bin/emacs23 %F
。
答案1
~/.bashrc
通常是在您登录后为辅助交互式 shell 读取的。如果您想在登录时初始化参数,请使用~/.profile
。要将参数应用于系统范围,请使用/etc/profile
。它是 bash 读取的第一个文件。
为了让事情更清楚,我想我应该进一步解释一下。
- 当您登录时,您的登录 shell 首先读取全局变量
/etc/profile
,然后~/.profile
初始化其中提到的参数/变量。但是,您看不到此 shell 作为终端,因为 X-window 系统 GUI 正在运行。 - 登录后,当您打开辅助终端/终端模拟器时,例如
gnome-terminal
~/.bashrc
将被读取,并且其中声明的参数/变量仅对辅助终端可用。请注意,此辅助终端是您的登录 shell 的子进程。 - 当您从菜单启动应用程序时,它将作为登录 shell 的子进程执行,并从其祖先进程继承参数。但
.bashrc
对于主登录 shell 不可用;因此它对应用程序也不可用。因此,.bashrc
如果从菜单运行, 中的任何内容都不会对这些应用程序可用。但是当您打开gnome-terminal
并从那里执行命令时,应用程序将作为 的子进程启动gnome-terminal
并.bashrc
从中继承 的参数。