Raspbian 上的 LXDE 内的 $PATH 未修改

Raspbian 上的 LXDE 内的 $PATH 未修改

我在 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

相关内容