为什么我的环境变量是永久的?

时间:2010-12-23 23:18:44

标签: tcsh

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

2 个答案:

答案 0 :(得分:2)

您的.tcshrc是一个可执行脚本。您必须实际执行它才能对其进行更改以产生任何效果。这通常会在您启动新shell时自动发生。

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

答案 1 :(得分:1)

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

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

例如:

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