我在虚拟机上运行 Debian。我登录 GUI 并转到“应用程序”>“附件”>“终端”。
# echo shell: /bin/bash
我修改了ENV_SUPATH
,ENV_PATH
里面的/etc/login.defs
.我重新启动了外壳。在超级用户模式下echo $PATH
显示我的更新。在正常模式下echo $PATH
不显示我的更新。我添加并修改了~/.bash_profile
。我仍然看不到自己的变化,我开始追我的尾巴。
/etc/login.defs
内容:
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/brian/.linuxbrew/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/brian/.linuxbrew/bin
~/.bash_profile
:
PATH=/home/brian/.linuxbrew/bin:$PATH
我该如何排查并解决这个问题?
答案1
简短的回答:也调整/etc/profile
(并且/etc/sudoers
小心)
长答案: PATH 变量在多个地方定义。
根据登录.defs(5),仅su
使用它。
在(variable )中有它sudo
自己的安全 PATH 定义/etc/sudoers
secure_path=...
大多数 Unix shell 将读取/etc/profile
和~/.profile
。在 Debian 中,该文件用于定义登录 shell 的 PATH。 Bash 还读取~/.bash_profile
,~/.bash_login
.
...可能还有更多(运行grep '\<PATH\>' /etc/ -R
)