0

这个问题困扰了我一段时间。有时我会在我的 .tcshrc 文件中设置一个环境变量。一旦我不再需要它,我就会从我的 .tcshrc 文件中删除它;但是,由于某种原因,该变量在我的 shell 中变成了永久变量。我认为一旦设置被评论或删除,.tcshrc 文件中的所有内容都不意味着是永久的。这特别发生在我想添加的新 PATH 上。现在我不再需要它了,从 .tcshrc 文件中删除它什么都不做。

4

2 回答 2

2

您的 .tcshrc 是一个可执行脚本。您必须实际执行它才能对它的更改产生任何影响。这通常在您启动新的 shell 时(自动)发生。

您可能遇到的另一个问题是子进程继承了环境变量。如果您的 .tcshrc 添加到变量而不是覆盖它们(这在 PATH 中并不少见),那么这可能会导致您看到的行为。您当前的 shell 进程在 PATH 中有额外的条目,即使子 shell 没有其添加到 PATH(由于您最近的 .tcshrc 更改),它也已经存在。

于 2010-12-23T23:21:55.753 回答
1

在 .tcshrc 中设置的环境变量会影响使用该版本 .tcshrc 的任何 tcsh shell 。修改文件会影响您以后启动的任何 tcsh 进程,但不会影响任何现有进程。在 shell 进程中设置变量后,取消设置的唯一方法是使用“unsetenv”命令(或具有不同值的“setenv”)。

当前 tcsh 进程(使用旧版本 .tcshrc 的那个)中的任何环境变量也将被您从 tcsh 调用的任何进程继承。

例如:

  1. setenv FOO BAR在您的 .tcshrc 中启动一个新的 tcsh 进程。$FOO 设置为“BAR”。
  2. 修改您的 .tcshrc 文件,删除“setenv”命令。 这对任何正在运行的进程中的任何环境变量都没有影响。
  3. 从 tcsh 提示符启动 bash。bash shell 进程将 $FOO 设置为“BAR”,因为它从它的父进程(你的 tcsh 进程)继承了它,它是从的.tcshrc 文件中获取的。
  4. 注销并再次登录,所有将 $FOO 设置为“BAR”的进程现在都消失了。您有一个从新的 .tcshrc 读取的新 tcsh 进程因此未设置 $FOO。
于 2011-07-23T22:07:17.933 回答