我安装了 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
。
我的问题:
- 你觉得我的计划怎么样?
- 你认为这会有用吗?
- 你对如何改进它有什么建议吗,或者还有其他选择
附加信息:我的.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
,但这更明显。