我使用命令在 .tcshrc 文件中设置了很多环境变量setenv
。
当我今天需要取消设置其中之一时,我移动了这个文件并打开了一个新终端(这一切都在 Gnome 图形环境中),期望我在 .tcshrc 中设置的环境变量不再位于环境中。
但其中一些变量仍然是固定的;它们还可以设置在哪里?我知道我的 .login 文件是空的。
setenv 命令比我想象的更加全局化吗?当我通过 alt-ctrl-F2 打开新的虚拟终端时,变量不再设置。
答案1
这与会话和登录 shell 相关,而不是与普通 shell 相关。
当您启动一个新会话时(这是您登录时发生的情况,无论是通过虚拟终端还是启动新的桌面会话),登录过程都会创建一个裸环境,然后您tcsh
将作为登录 shell 被调用,执行其启动例程,其中包括处理全局启动文件(如/etc/csh.cshrc
)和您的.tcshrc
文件。
因此,在这种情况下,您一定会看到所有更改。
当您启动“普通”shell(从桌面环境或从tcsh
现有 shell 运行)时,不会清理环境,也不会处理全局文件(但会处理本地配置文件)。
由于环境未清理,您的新的普通 shell 会从其父级(桌面系统的进程之一)继承它。该进程已读取您的配置文件的先前版本,因此它仍然设置了旧的环境变量。
通过注销桌面会话并重新登录,您将看到所做的更改生效。
请参阅tcsh
手册页了解何时处理哪些文件。