我在 home/pi 中有一个 bin 目录。当我登录(通过 .profile)时,它被添加到我的 $PATH 中,但是当我进入 LXDE 并使用 LXTerminal 时,我的 bin 目录不再添加到 $PATH 中。
答案1
在大多数设置中,~/.profile
在登录时读取这是设置环境变量的常用位置。不幸的是,某些发行版、显示管理器(图形登录方法)和桌面环境的组合会跳过该文件。您没有指定您正在使用哪个显示管理器(lxdm?),但它显然不会~/.profile
在 X 会话启动时安排读取。
我相信 Raspbian 支持~/.pam_environment
.每个登录方法都会读取此文件,pam_env
其中包含 not-to-antique聚丙烯酰胺auth 或 session 部分。我相信 Raspbian 就是这种情况(检查/etc/pam.d/common-session
或/etc/pam.d/lxdm
包含提及的行pam_env.so
)。您可以在 中定义环境变量~/.pam_environment
,但可能性比在 中更有限~/.profile
:您只能编写VARIABLE=VALUE
,不能使用其他变量或添加到变量的现有值中。所以你不能PATH=$HOME/bin:$PATH
像在 中那样写~/.profile
,你必须拼写出来:
PATH=/home/pi/bin:/usr/local/bin:/usr/bin:/bin
我不建议在中设置环境变量.bashrc
。每当您启动子 shell 时,这都会覆盖现有值,并且变量只会在通过终端中的 shell 启动的程序中定义,不在直接从 GUI 启动的程序中。
答案2
从man bash
:
当 bash 作为交互的登录壳,或者作为带有 --login 选项的非交互式 shell,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会查找 ~/.bash_profile、~/.bash_login 和〜/.profile,按该顺序,并从第一个存在且可读的命令中读取并执行命令。启动 shell 时可以使用 --noprofile 选项来禁止此行为。
当一个登录外壳退出时,bash 会从文件 ~/.bash_logout 和 /etc/bash.bash_logout 中读取并执行命令(如果这些文件存在)。
当 交互式外壳这不是登录壳启动后,bash 读取并执行命令~/.bashrc,如果该文件存在。
“交互式 shell”是在终端前台启动的 shell,但它们不一定是登录贝壳。
A登录外壳参数零的第一个字符是 -,或者以 --login 选项开头。
GUI 终端不这样做。
这就是为什么一般来说,.profile
来源.bashrc
——然后.bashrc
可以包含你想要的东西全部shell 以及.profile
任何仅用于登录 shell 的其他内容。有时,这是.profile
通过检查是否$PS1
定义了(交互式提示)来限定的,以便.bashrc
仅包含交互式提示。原因之一是避免在非交互式(例如,脚本执行)shell 中使用某些别名。
所以:您可以将 $PATH 定义放入~/.bashrc
,并确保它源自~/.profile
或~/bash_profile
。