Control mode behaviors

  • 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

  • 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:

  • 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

  • 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 and remove-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

  • 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

Modulefile command options

  • 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 of setenv 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 of remove-path sub-command.

  • The --append-on-unload, --prepend-on-unload options cannot be mixed with the --glob option of remove-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

Misc

  • FUTURE: what is applied to:

    • module use may also be interesting for module load

    • module unuse may also be interesting for module unload