我如何设置路径以便可以通过同一个程序从 GUI 和命令行读取它?

我如何设置路径以便可以通过同一个程序从 GUI 和命令行读取它?

我安装了 texlive,我想将其作为环境变量添加到我的 Path 中,以便当我从 GUI 或命令行启动 emacs 时,Emacs AucTeX 可以读取它。到目前为止,我读到 emacs 只读取来自 的文件~/.profile

因此,我的计划是将 texlive 添加到我的路径中,.profile以便 emacs GUI 能够读取它,然后~/profile从中获取源代码.bashrc,以便在我的非登录交互式 GNOME 终端内启动的 emacs 能够看到该路径。

.profile注意:我的主目录中没有文件,只有我的/etc目录中有,我宁愿不碰那个文件,但我.bash_profile的主目录中有一个。但是我读到它只.bash_profile在交互式登录会话(即我不使用的控制台模式)中运行。

我的计划是在我的主目录中创建一个.profile文件并执行以下操作:

步骤 1:创建~/.profile

步骤 2:将 texlive 环境变量添加到路径中.profile

export PATH=/usr/local/texlive/2018/bin/x86_64-linux:$PATH
export MANPATH=/usr/local/texlive/2018/texmf-dist/doc/man:$MANPATH
export INFOPATH=/usr/local/texlive/2018/texmf-dist/doc/info:$INFOPATH

步骤 3:.profile来源.bashrc

#Adding this at the bottom or start of .bashrc to source .profile when the terminal is opened.

if [-s ~/.profile]; then;
    source ~/.profile;
fi

我知道很多人对从 中获取源代码感到担忧.profile.bashrc因为存在导致无限循环的风险。但是,由于我是.profile从头开始创建文件,因此这不会成为问题,因为它不包含任何引用 的代码.bashrc

我的问题:

  1. 你觉得我的计划怎么样?
  2. 你认为这会有用吗?
  3. 你对如何改进它有什么建议吗,或者还有其他选择

附加信息:我的.bashrc仅包含源代码~/etc/bashrc和一个由 Anaconda 自动添加的环境变量:export PATH="/home/Fedora_User/Anaconda3/bin:$PATH"

请记住,我知道 gnome-terminal 可以作为交互式登录 shell 运行,但我从未这样做过,也不知道它是否会影响我的终端会话的性能。

答案1

首先,请注意,如果您想要~/.profile读取,则需要删除~/.bash_profile,否则~/.profile将被 Bash 忽略。

您实际上有点把事情复杂化了。PATH 已在 中设置/etc/environment。它始终export已设置,因此无需再次导出。

如果您对 PATH 进行更改,则~/.profile每个 shell 都会继承这些更改,无论是登录 shell、交互式 shell 还是其他 shell。

导出的其他变量~/.profile也将被传递到环境中,并在每个 shell 中可用。~/.profile当您登录到会话时读取一次,并且导出的变量保持导出状态。

导入源~/.profile文件~/.bashrc是个坏主意。~/.profile源文件~/.bashrc会造成无限循环。即使~/.profile没有源文件,~/.bashrc~/.bashrc源文件~/.profile或任何其他带有类似分配的文件导入也是个坏主意

PATH=$PATH:/some/other/place

因为每次交互式 shell 启动另一个交互式 shell 时,PATH 都会扩展……最终你的 PATH 会变成

/original/path:/some/other/place:/some/other/place:/some/other/place

ETC。

您的 MANPATH 分配不需要包含$MANPATH但应该以冒号开头。请参阅这个问题及其答案。默认情况下,MANPATH 未设置,正确的路径是动态确定的(我不知道这是怎么回事),因此包含现有的 MANPATH 不会产生任何作用。您可能需要在 MANPATH 赋值开头加上冒号,以避免阻止路径动态确定。据我所知,INFOPATH 也是如此

因此,我建议:

改名~/.bash_profile ~/.profile

添加以下行:

PATH="$PATH:/usr/local/texlive/2018/bin/x86_64-linux"
export MANPATH=":/usr/local/texlive/2018/texmf-dist/doc/man"
export INFOPATH=":/usr/local/texlive/2018/texmf-dist/doc/info"

请注意,我已将其附加到 PATH 而不是添加到前面。您可以根据$PATH需要将其添加到前面(放在末尾而不是开头)。将运行在路径查找中找到的第一个可执行文件,因此,如果位于不同 PATH 位置的两个程序具有相同的名称,则将运行 PATH 中第一个(最左边)目录中的程序。

不要向中添加任何内容~/.bashrc。修改的环境变量或导出的新变量~/.profile将对每个 shell 可用,无需在其他地方额外设置。

还请注意,您不应该/etc/bash.bashrc在 中进行源代码管理~/.bashrc,因为/etc/bash.bashrc已经由每个交互式 shell 首先进行源代码管理*,并且我们使用~/.bashrc进行后续调整。

* 一个例外 -/etc/bash/bashrc使用不可靠的方法检查 shell 是否是交互式的 - 它检查 PS1 是否已设置。如果您启动 shell 并取消设置 PS1,/etc/bash.bashrc则不会获取任何信息,即使 shell 是交互式的。另一个例外是当 shell 以 启动时--norc,但这更明显。

相关内容