我正在路径/代码项目之间切换。在每个地方我都有不同的模块。为了处理这个问题,有一个设置脚本可以修改要使用的内容。这是通过工具“模块”来处理的。
笔记: modules
是一个用于管理环境的包,允许重新配置环境,以便各种应用程序存在$PATH
或不存在。
问题是每次更新模块路径时都会将新条目添加到文件中~/.modulesbeginenv
#!/user/bin/env tcsh
module unuse $path1
module use $path2
module add project_module
~/.modulebeginenv
这个简短的示例在每次调用时添加两行。先MODULEPATH='paths'
无$path1
,后MODULEPATH='paths'
有$path2
。
对我来说,更改是附加而不是更新似乎很奇怪。是否有任何配置来控制此问题或有其他方法来解决它?
答案1
查看使用情况,您看到的行为听起来像是我对子命令的期望use
。
module use [-a |--append] directory [directory...]
默认情况下,此子命令将目录添加到
$MODULEPATH
环境变量中。如果使用-a
or--append
参数,则目录将被追加到$MODULEPATH
.
使用子命令unuse
它将删除您提供的任何路径。
module unuse directory [directory...]
从 $MODULEPATH 环境变量中删除该目录。
如果您想完全覆盖变量,您可以随时使用该setenv
命令。
setenv variable value
将环境变量设置为值。该
setenv
命令还将更改进程的环境。使用 Tcl 的 env 关联数组的引用将引用使用该setenv
命令所做的更改。使用 Tcl 的 env 关联数组进行的更改不会像 setenv 命令那样更改用户的环境变量。以这种方式进行的环境更改只会影响模块解析过程。该命令对于在or命令setenv
之前更改环境也很有用。当模块文件被卸载时,变成.如果环境变量已定义,则在加载模块文件时它将被覆盖。随后的卸载将取消设置环境变量 - 之前的值无法恢复! (除非你明确处理它......见下文。)......exec
system
setenv
unsetenv