当我输入 时echo $PATH
,我得到输出:
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
但是,我使用;修改了我的PATH
变量gksudo gedit /etc/environment
文件现在读取为PATH="/opt/texbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
.
我不确定为什么我会得到两个不同的值PATH
。我该如何修复它?
我正在 Chromebook 上使用 Crouton 运行 Xfce。
答案1
编辑
/etc/profile
影响所有用户。~/.bash_profile
影响单个用户的 bash shell(所以不是这个,因为它是针对 bash 特定的东西)。~/.profile
影响单个用户、所有 shell。
注意:如果您同时拥有 和.profile
,.bash_profile
并且您希望 bash 读取两者,那么您必须将. .profile
, .bash_profile
as添加.profile
到默认情况下不读取,如果.bash_profile exists
在sudo
- 不要以 root 身份运行你的编辑器,所以不要这样做
gksudo gedit «filename»
- 避免以 root 身份运行 X11 应用程序,所以不要这样做
gksudo gedit «filename»
- 相反,做
EDITOR=gedit sudoedit «filename»
.它将像处理临时文件一样运行编辑器,完成后它将以 root 身份复制填充内容。
答案2
正确的设置位置PATH
是~/.bash_profile
:
PATH="$PATH:/some/extra/paths:/may/go/here"
该PATH
变量应该已经导出,因此您不需要export
再次导出它(再次导出它不会产生进一步的影响)。
的默认路径bash
被硬编码到bash
可执行文件中,然后在/etc/profile
和 (在某些系统上)中进一步(可能)修改/etc/bash.bashrc
。
我的猜测是,中设置的路径/etc/environment
主要由非shell使用,例如cron
etc。
也可以看看:
答案3
/etc/environment
是系统范围的后备。每个用户的配置~/.bash_profile
可能会覆盖它。无论如何,不要乱搞/etc/environment
配置 bash,而是将PATH
你想要的任何内容放入~/.bash_profile
.即使/etc/environment
是错误的,它也会被你输入的内容覆盖~/.bash_profile
。
您可能还应该恢复/etc/environment
到之前的状态,以避免依赖它的程序出现轻微损坏。该文件随程序包一起提供,因此您可以使用程序包管理器将其重置为原始形式。
答案4
更新说明:我为 zsh 编写了这个,但它也适用于 bash。
这是我用来保持道路清洁的一个技巧。 (注意:我将 zsh 配置作为单独的文件加载。此文件需要首先加载,因此在保持标准化命名约定的同时强制执行此操作的一个简单方法是使用前缀。前缀 with0_pathfix.zsh
将导致该文件在其他 Zsh 配置文件之前运行。)
# add to path if $1 is not already in path
pathAppend() {
if ! echo $PATH | egrep -q "(^|:)$1($|:)" ; then
PATH=$PATH:$1
fi
}
# filters the path checking against itself for duplicates returns clean path then exports the clean path.
PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++{if (NR > 1) printf ORS; printf $a[$1]}'); export PATH;
# This ensures that even if you manually added to the path the next time zsh source is reloaded the path will clean itself.