Alma Linux 8의 `env` 환경에서 볼 수 있는 bash 기능은 무엇입니까?

Alma Linux 8의 `env` 환경에서 볼 수 있는 bash 기능은 무엇입니까?

Alma Linux 8에서 이것을 실행하면 env다음 메시지가 나타납니다.

BASH_FUNC_which%%=() {  ( alias;
 eval ${which_declare} ) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@
}
BASH_FUNC_module%%=() {  _module_raw "$@" 2>&1
}
BASH_FUNC__module_raw%%=() {  unset _mlshdbg;
 if [ "${MODULES_SILENT_SHELL_DEBUG:-0}" = '1' ]; then
 case "$-" in 
 *v*x*)
 set +vx;
 _mlshdbg='vx'
 ;;
 *v*)
 set +v;
 _mlshdbg='v'
 ;;
 *x*)
 set +x;
 _mlshdbg='x'
 ;;
 *)
 _mlshdbg=''
 ;;
 esac;
 fi;
 unset _mlre _mlIFS;
 if [ -n "${IFS+x}" ]; then
 _mlIFS=$IFS;
 fi;
 IFS=' ';
 for _mlv in ${MODULES_RUN_QUARANTINE:-};
 do
 if [ "${_mlv}" = "${_mlv##*[!A-Za-z0-9_]}" -a "${_mlv}" = "${_mlv#[0-9]}" ]; then
 if [ -n "`eval 'echo ${'$_mlv'+x}'`" ]; then
 _mlre="${_mlre:-}${_mlv}_modquar='`eval 'echo ${'$_mlv'}'`' ";
 fi;
 _mlrv="MODULES_RUNENV_${_mlv}";
 _mlre="${_mlre:-}${_mlv}='`eval 'echo ${'$_mlrv':-}'`' ";
 fi;
 done;
 if [ -n "${_mlre:-}" ]; then
 eval `eval ${_mlre} /usr/bin/tclsh /usr/share/Modules/libexec/modulecmd.tcl bash '"$@"'`;
 else
 eval `/usr/bin/tclsh /usr/share/Modules/libexec/modulecmd.tcl bash "$@"`;
 fi;
 _mlstatus=$?;
 if [ -n "${_mlIFS+x}" ]; then
 IFS=$_mlIFS;
 else
 unset IFS;
 fi;
 unset _mlre _mlv _mlrv _mlIFS;
 if [ -n "${_mlshdbg:-}" ]; then
 set -$_mlshdbg;
 fi;
 unset _mlshdbg;
 return $_mlstatus
}
BASH_FUNC_switchml%%=() {  typeset swfound=1;
 if [ "${MODULES_USE_COMPAT_VERSION:-0}" = '1' ]; then
 typeset swname='main';
 if [ -e /usr/share/Modules/libexec/modulecmd.tcl ]; then
 typeset swfound=0;
 unset MODULES_USE_COMPAT_VERSION;
 fi;
 else
 typeset swname='compatibility';
 if [ -e /usr/share/Modules/libexec/modulecmd-compat ]; then
 typeset swfound=0;
 MODULES_USE_COMPAT_VERSION=1;
 export MODULES_USE_COMPAT_VERSION;
 fi;
 fi;
 if [ $swfound -eq 0 ]; then
 echo "Switching to Modules $swname version";
 source /usr/share/Modules/init/bash;
 else
 echo "Cannot switch to Modules $swname version, command not found";
 return 1;
 fi
}
BASH_FUNC_scl%%=() {  if [ "$1" = "load" -o "$1" = "unload" ]; then
 eval "module $@";
 else
 /usr/bin/scl "$@";
 fi
}
BASH_FUNC_ml%%=() {  module ml "$@"
}

하지만 이 모든 것이 나에게는 매우 새로운 것입니다. 무엇이 이러한 기능을 생성하고 어떤 역할을 합니까? 이게 정상인가요?

답변1

이것들은 다음에서 나온 것 같습니다. 환경 모듈팩.

쉘 초기화를 단순화하고 사용자가 모듈 파일을 사용하여 세션 중에 환경을 쉽게 수정할 수 있도록 하는 도구입니다.

$ module load gcc/9.4
$ which gcc
/usr/local/gcc/9.4/linux-x86_64/bin/gcc

이제 다른 버전의 모듈로 전환하겠습니다.

$ module switch gcc gcc/10
$ which gcc
/usr/local/gcc/10.3/linux-x86_64/bin/gcc

module실행 중인 쉘을 변경하려면 명령이 함수여야 합니다 .

패키지 environment-modules나 제공된 디렉토리를 제거해 보십시오 /usr/share/Modules/. 실패하면 다음 명령을 사용하여 모든 기능을 취소할 수 있습니다.

unset -f $(typeset -F | awk '{print $3}')

관련 정보