Hi Myles,
This issue has been fixed on Modules 5.4.0 that was released earlier this year.
Change has been made to execute unalias in any case but do not take
errors into account (as we want the alias to not be there, so if it is
already missing we are satisfied).
Now the following command is rendered for sh shell when processing an
unalias modulefile command:
unalias <name> 2>/dev/null || true;
Regards,
Xavier
Le mar. 27 août 2024 à 22:40, Myles <smp...@gm...> a écrit :
>
> Hi Xavier--
>
> I'm so sorry, I missed your reply somehow!
>
> I think you should just check for alias defined before trying to unalias.
> Ex, for bash:
>
> $ [[ $(type -t x) == "alias" ]] && echo "x is an alias"
> x is an alias
> $ alias x
> alias x='chmod +x'
> $ [[ $(type -t e) == "alias" ]] && echo "e is an alias"
>
> $ [[ $(type -t $the_alias) == "alias" ]] && unalias $the_alias
>
> Thanks for the quick response. Sorry again for missing it.
> --Myles
>
> On Wed, Dec 13, 2023 at 12:36 AM Xavier Delaruelle <xav...@gm...> wrote:
>>
>> Hi Myles,
>>
>> Many thanks for this issue report.
>>
>> I think I should adapt the shell code generated by "unset-alias", to only execute "unalias" shell command if alias is found defined.
>>
>> There is a way currently to avoid this error: let module propagate shell aliases to sub-shells. This can be achieved for interactive script execution by enabling "set_shell_startup" configuration option prior module command initialization [1].
>>
>> set_shell_startup defines the ENV and BASH_ENV variables and make them point to the Modules shell initialization script. With these env variables set, Modules shell init script is executed at start of the shell script you run. Loaded modules are refreshed which recreates shell alias in this sub-shell.
>>
>> $ cat test
>> #!/bin/bash
>> alias foo
>> module purge
>> $ module load foo
>> $ alias foo
>> alias foo='value'
>> $ bash test
>> test: line 2: alias: foo: not found
>> environment: line 4: unalias: foo: not found
>>
>> $ module purge
>> $ module config set_shell_startup 1
>> $ eval $(./modulecmd.tcl bash autoinit)
>> $ module load foo
>> $ bash test
>> alias foo='value'
>>
>> Regards,
>> Xavier
>>
>> [1] https://modules.readthedocs.io/en/latest/module.html#envvar-MODULES_SET_SHELL_STARTUP
>>
>>
>>
>>
>> Le mer. 13 déc. 2023 à 07:01, Myles <smp...@gm...> a écrit :
>>>
>>> I have a module with a set-alias that I load for my interactive shell. Let's say the alias is 'foo'.
>>>
>>> Then, when I run this script from that interactive environment:
>>> #!/bin/bash
>>> module purge
>>>
>>> I am getting:
>>> environment: line 26: unalias: foo: not found
>>>
>>> This is because the alias is not propagated to the child process. Shouldn't the unalias that happens during an unload check that the context shell is interactive?
>>>
>>> I am using EnvModules v5.3.1.
>>>
>>> I found this discussion, but I couldn't decide what to take away from it.
>>>
>>> https://sourceforge.net/p/modules/mailman/modules-interest/thread/546...@at.../
>>>
>>> Thanks!
>>> --Myles
>>> _______________________________________________
>>> Modules-interest mailing list
>>> Mod...@li...
>>> https://lists.sourceforge.net/lists/listinfo/modules-interest
>>
>> _______________________________________________
>> Modules-interest mailing list
>> Mod...@li...
>> https://lists.sourceforge.net/lists/listinfo/modules-interest
>
> _______________________________________________
> Modules-interest mailing list
> Mod...@li...
> https://lists.sourceforge.net/lists/listinfo/modules-interest
|