Старые версии модулей, такие как версия 3.2
, которую вы используете, всегда возвращают 0
, если он потерпел неудачу или успешен. В этой версии вы должны проанализировать вывод, как предложено @franzisk. Модули возвращают свои выходные данные в stderr (поскольку stdout используется для перехвата применяемых изменений среды)
Если вы не хотите полагаться на сообщения об ошибках, вы можете вывести список загруженных модулей после команды module load
с помощью module list
команда. Если модуль не найден в выводе команды module list
, это означает, что попытка загрузки модуля не удалась.
module load fake_module
if [[ "`module list -t 2>&1`" = *"fake_module"* ]]; then
echo "Should never have gotten here" # the command has no errors
else
echo "This is what I should see." # the command has an error
fi
Более новые версии модулей (> = 4.0
) теперь возвращают соответствующий код выхода. Итак, ваш первоначальный пример будет работать с этими новыми версиями.