- Modulefile commands that modify environment variables applies
- a behavior when modulefile is loaded
- and another behavior when modulefile is unloaded
- Depending on the situation, it seems interesting to apply a different behavior when modulefile is unloaded:
- restore value unset at load time, either:
- append-on-unload
- prepend-on-unload
- remove value from list: remove-on-unload
- unset full variable value: unset-on-unload
- set another value, either:
- append-on-unload
- prepend-on-unload
- set-on-unload (for non-path-like variable)
- do nothing: noop-on-unload
- restore value unset at load time, either:
- Also when modulefile loads sometimes it may be interesting to apply a slightly different behavior depending on the situation:
- set value only if variable is undefined: set-if-undef
- Concerned modulefile commands:
module use<module>
module unuse<module>
setenv
unsetenv
append-path
prepend-path
remove-path
- Only applies when the above commands are called from a modulefile (as some of these commands can also act as module sub-commands)
Unload behavior of concerned modulefile commands:
Command Default unload behavior Specific unload behavior Alternative behaviors to add module use remove-on-unload n/a module unuse remove-on-unload n/a append-on-unload, prepend-on-unload, noop-on-unload setenv unset-on-unload n/a unsetenv noop-on-unload set-on-unload (when 2nd argument is provided) unset-on-unload append-path remove-on-unload n/a prepend-path remove-on-unload n/a remove-path noop-on-unload n/a remove-on-unload, append-on-unload, prepend-on-unload - When either restoring or setting other value for path-like modulefile commands, it is needed to know if the value should be appended or prepended.
- Either restoring or setting other value result in the same behavior name
- append-on-unload and prepend-on-unload
- position of the option will determine if the values to set are:
- those unset at load time: when option is placed prior value list
- a different list of value: when option is placed after value list to unset at load time and another value list is defined after option
- The set-on-unload behavior is only useful for modulefile commands which unset value on load mode, as commands that set value on load mode mainly need to unset the value set.
- Default unload behavior of
module unuse
,unsetenv
andremove-path
commands can also be set as an option in their argument list. Helps to dynamically choose the behavior to apply, which could be the default behavior.
Load behavior of concerned modulefile commands:
Command Default load behavior Alternative behaviors to add module use set-on-load module unuse remove-on-load setenv set-on-load set-if-undef unsetenv unset-on-load append-path add-on-load prepend-path add-on-load remove-path remove-on-load
- Alternative behaviors could be specified by setting the associated option over the modulefile command:
--remove-on-unload
--append-on-unload
--prepend-on-unload
--noop-on-unload
--unset-on-unload
--set-if-undef
- The
--append-on-unload
and--prepend-on-unload
options either:- restore the value list removed at load time if placed prior this value list
- set a different value list if a different list of value is specified after option (all the values set after the option are considered element to add to the path-like variable)
- both options also accept to be set prior or right after variable name or even right at the end of argument list to restore value list removed at load time
- The
--set-if-undef
option does not change the behavior ofsetenv
when modulefile is unloaded: environment variable will be unset whether the option is set or not. - The
--remove-on-unload
option can be set anywhere in argument list - The
--remove-on-unload
,--append-on-unload
and--prepend-on-unload
options cannot be mixed with the--index
option ofremove-path
sub-command. - The
--append-on-unload
,--prepend-on-unload
options cannot be mixed with the--glob
option ofremove-path
sub-command. - The
--remove-on-unload
,--append-on-unload
,--prepend-on-unload
and--noop-on-unload
options:- can be placed at different positions in argument list to limit error cases
- if multiple options of this kind are defined in argument list, the one defined at the most right is retained
- FUTURE: what is applied to:
module use
may also be interesting formodule load
module unuse
may also be interesting formodule unload