bash/cygwin/$PATH: 修改$PATH真的需要重启吗?

5 投票
4 回答
9922 浏览
提问于 2025-04-15 12:53

我想使用在cygwin下安装的Python,而不是直接在WinXP上安装的那个,所以我编辑了~/.bashrc文件并进行了更新。但是,什么都没有改变。我尝试了其他方法,但无论我怎么做,$PATH都没有任何变化。于是我重启了电脑。哎呀,现在$PATH变成了我想要的样子。

但是,有谁能解释一下为什么会这样吗?通过cygwin(和bash)对环境(及其变量)所做的更改,为什么只有在重启后才会生效呢?

(这算不算是个好办法呢?) (这个问题可能不会得到什么好评,但我很好奇,而且我也厌倦了翻阅那些对此没有帮助的文档。)

4 个回答

1

这里有几个事情可以尝试,帮助你排查问题:

  1. 你在命令行中执行时,是否也出现了和下面一样的情况?(这是我在cygwin中复制的,它的表现是正常的。)

    $ echo $PATH
    /usr/local/bin:/usr/bin:/bin
    
    $ export PATH=$PATH:/cygdrive/c/python/bin
    
    $ echo $PATH
    /usr/local/bin:/usr/bin:/bin:/cygdrive/c/python/bin
    
  2. 你的bashrc文件中设置PATH的方式是否和上面类似?(也就是第二个命令的方式)。

  3. 你的bashrc文件里有没有出现“source”或者“.”这个命令?(可能它在引用其他文件,从而覆盖了你的PATH变量。)

2

如果你想让你的修改永久生效,你需要修改正确的文件(在这个情况下是.bashrc),然后执行以下其中一个操作:

  • 重启cygwin窗口
  • 输入source .bashrc(这个方法应该有效,即使你现在用不了)
  • 输入. .bashrc(这里的点是一个符号,后面加一个空格和文件名)

不过,.bashrc文件是默认在使用BASH命令行时会用到的,所以如果你在用其他类型的命令行(比如csh、ksh、zsh等),那么修改.bashrc文件的内容是不会生效的。

3

试试:

PATH="${PATH}:${PYTHON}"; export PATH

或者:

export PATH="${PATH}:${PYTHON}"

引号可以保留你在目录名称中没有的空格和换行。我再强调一次“没有”

如果你想改变当前环境的路径,以及之后的任何进程,可以使用上面类似的命令;它们是等效的。

如果你想在下次启动Bash时改变路径,可以编辑~/.bashrc文件,添加上面的命令之一(比如说),或者编辑你在那找到的现有PATH设置命令。

如果你想同时影响当前环境和之后的环境(也就是立即生效和“永久”生效),编辑~/.bashrc,然后执行以下操作之一:输入上面显示的前两种形式或者加载~/.bashrc文件。有时候,如果你正在使用一些临时的设置,比如有其他变量的值和~/.bashrc设置的不一样,你可能不想加载这个文件,因为那样会把这些临时设置重置。

我觉得你不需要担心哈希,除非你在进行一些大规模的调整,或者可能在为系统工具添加一些本地替代品。

撰写回答