我刚刚安装了 LaTEX,需要将路径添加到我的$PATH
变量中,以便我可以使用该命令。我尝试将路径 ( /usr/local/texlive/2015/bin/x86_64-linux
) 添加到我的路径中.bash_profile
,当我重新启动终端时echo $PATH
,它不会显示我的添加。我添加的相关代码:
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/texlive/2015/bin/x86_64-linux
export PATH
我尝试添加路径/etc/profile
但没有成功。任何建议将不胜感激。
答案1
你的代码是正确的。该位置可能正确,也可能不正确。.bash_profile
如果您的登录 shell 是 bash 并且您以文本模式登录(在文本控制台或通过网络),则会读取该信息。但是,如果您在图形提示符下登录,则在大多数系统上,.bash_profile
不是读取,而是.profile
读取。为了避免重复,我建议将所有环境变量分配放入.profile
并使用以下代码为.bash_profile
交互式和非交互式登录 shell 执行正确的操作:
. ~/.profile
case $- in *i*) . ~/.bashrc;; esac
不要将环境变量定义PATH
放在.bashrc
.这仅适用于从终端调用的程序,例如,如果您的编辑器尝试自动运行 LaTeX,则无效。
由于.profile
(或.bash_profile
) 仅在您登录时读取,因此只有在您注销并重新登录后,该设置才会生效。您可以通过键入(或粘贴)使设置在终端(包括从该终端启动的程序)中生效)PATH=…
那里的命令。某些桌面环境和窗口管理器允许您修改其环境变量;如何执行此操作取决于桌面环境。
答案2
.bash_profile
在登录期间是只读的,打开终端不是登录。您可能应该将其添加到您的.bashrc
代码中,以便交互式 shell 能够读取它。
您可以在以下位置查看更多关于此问题的讨论:这个问题
答案3
Gilles 的回答不考虑非登录交互式 shell
概括:
如果我们需要向交互式和非交互式环境添加 PATH,我们需要考虑几种情况:
- 非登录交互式 bash shell
只读取 .bashrc,不读取 .profile 或 .bash_profile
- 登录交互式 bash shell
读取.profile(.profile中默认读取.bashrc)
或 .bash_profile(如果存在)
- 登录非交互式 shell
仅读取 .profile(或 .bash_profile 如果存在)
默认情况下不会读取 .bashrc,并且在 .profile 中搜索 .bashrc 不应返回 true,如下所示
如果 [ -n '$BASH_VERSION'];然后
- 非登录非交互式 shell
默认不读取任何内容
注意:我的答案也可能不完全正确,在这里写下答案以防万一
来源:
- https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells
- 不完全正确,错误的部分是非交互式 shell 不调用
.bashrc
- 不完全正确,错误的部分是非交互式 shell 不调用
- https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
更多的:
测试登录非交互式情况
要测试 .profile 在登录非交互式情况下如何运行,可以在 if else 语句下的文件中添加一些回显
~/.profile
if [ -n '$BASH_VERSION'];
then
echo test > test.txt
else
echo bash version missing > test.txt
fi