概括:

概括:

我刚刚安装了 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,我们需要考虑几种情况:

  1. 非登录交互式 bash shell

只读取 .bashrc,不读取 .profile 或 .bash_profile

  1. 登录交互式 bash shell

读取.profile(.profile中默认读取.bashrc)

或 .bash_profile(如果存在)

  1. 登录非交互式 shell

仅读取 .profile(或 .bash_profile 如果存在)

默认情况下不会读取 .bashrc,并且在 .profile 中搜索 .bashrc 不应返回 true,如下所示

如果 [ -n '$BASH_VERSION'];然后

  1. 非登录非交互式 shell

默认不读取任何内容


注意:我的答案也可能不完全正确,在这里写下答案以防万一


来源:

  1. https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells
    • 不完全正确,错误的部分是非交互式 shell 不调用.bashrc
  2. https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

更多的:

  1. 登录/非登录和交互式/非交互式 shell

测试登录非交互式情况

要测试 .profile 在登录非交互式情况下如何运行,可以在 if else 语句下的文件中添加一些回显

~/.profile

if [ -n '$BASH_VERSION'];
then
    echo test > test.txt
else
    echo bash version missing > test.txt
fi

相关内容