通过键盘快捷键启动应用程序和通过终端启动应用程序有什么区别?

通过键盘快捷键启动应用程序和通过终端启动应用程序有什么区别?

我观察到的情况:

当我输入emacsgnome-terminal 时,它会在相同的环境中启动,并在 中设置变量.bashrc。如果我使用命令的键盘快捷键emacs,它会在没有这些变量的环境中打开。

问题:

  1. 这种行为有什么原因吗?
  2. 我怎样才能让 emacs 在具有 设置的环境中打开.bashrc
  3. 如果我有 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从中继承 的参数。

相关内容