gnome-terminal 调用 shell 时是否修改 PATH

gnome-terminal 调用 shell 时是否修改 PATH

PATH我猜想 gnome-terminal 可能在调用 shell 时修改了环境变量。具体来说,$HOME/.local/bin:$HOME/bin将始终附加到PATH.

我做了以下实验来证明这一点:

  • 打开 gnome 终端
  • 遍历“编辑”->“首选项”->“个人资料”并“编辑”您当前的个人资料(对我来说是“未命名”)
  • 在“命令”选项卡下,选中“运行自定义命令而不是我的 shell”,并在以下输入区域中填写sh.这样,bash应该以 -way 方式调用sh,并且它不是登录 shell。
  • 为了进一步确保/etc/profile, $HOME/.bash_profile,$HOME/.bashrc不会被获取,我们暂时重命名这些文件。 (实际上,这些文件不应该已经获取,因为我们正在调用非登录sh。)
  • 现在,打开一个新的 gnome 终端窗口并运行echo $PATH.这是我得到的:

    /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/naitree/.local/bin:/home/naitree/bin
    

我不明白为什么最后两条路径出现在PATH.

基于这一事实,我认为存在以下可能的解释:

  1. thePATH是从父进程继承的,在本例中是gnome-terminal-server.
  2. 它在某个脚本中被修改,该脚本在某个时刻PATH神秘地来源。sh
  3. PATH当 gnome-terminal-server 分叉子进程时, 会被修改。

现在我想我已经排除了#1和#2的可能性:

  1. cat /proc/$PPID/environ其中$PPID的 PIDgnome-terminal-server表明其PATH变量为/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin,其中不包含我们要查找的内容。
  2. sh在我们刚刚打开、运行的export -n PATH中,sh -x我看不到在这个新的 init 过程中没有任何来源sh。而且它PATH很干净:

    /usr/local/bin:/usr/bin
    

这给我留下了最后的可能性。

我错过了什么吗? gnome-terminal 是神秘修改的罪魁祸首吗PATH


更新:

我只是尝试sh -x作为自定义命令。打开 gonme-terminal 后,我没有看到任何内容。但是,echo $PATH说那$HOME/.local/bin并且$HOME/bin在那里。

以下是发行版相关信息:

  • Fedora 23 (4.4.8-300.fc23.x86_64)
  • bash 版本 4.3.42(1)-发布 (x86_64-redhat-linux-gnu)

更新2:

我刚刚尝试过:

  • 添加echo "$PATH"在 的最开头~/.bashrc
  • 在默认的非登录 shell 模式下使用 bash 打开 gnome-terminal,使用自定义命令bash -x

根据调试输出,我观察到这~/.bashrc是脚本源的起点。但$HOME/.local/bin和甚至$HOME/bin在那之前就已经存在了PATH

答案1

我遇到了类似的问题,终端PATH最初设置为/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin.

检查完所有常见的嫌疑人 、~/.bashrc~/.bash_profile/etc/bashrc/etc/profile,我尝试更改和DefaultEnvironment中的设置。但我最终还是在./etc/systemd/system.conf/etc/systemd/user.conf/usr/local/...PATH

pam_env一次偶然的机会,我在尝试找出路径环境的设置位置时遇到了对 的引用。所以我添加了以下行/etc/security/pam_env.conf

PATH DEFAULT=/bin:/sbin

重新登录后,终端 shellPATH就摆脱了讨厌的本地路径。

我很确定默认值来自pam_env,因为在更改 systemd 配置后,PID 1 和进程都systemd --user没有环境中的本地路径,但gnome-terminal-server确实如此。

现代 Linux 正在成为配置的噩梦。

我意识到这不是OP问题的答案。但它似乎足够相关,值得一提。

答案2

根据 Fedora 的评论,将 ~/.local/bin 添加到默认路径,这是 Fedora 特定的更改巴什配置,几年前的。

变化是在 RPM 中制造(不是上游),并且无证。

相关内容