시스템에서 쉘의 간단한 호출은 정의 된 별칭 (또는 함수)을 상속하지 않으므로 module
쉘이 찾을 수 없습니다 (발췌 부분은 아래 참고 참조). 시도 type module
하는 방법을 확인하려면 프롬프트에서 module
이 현재 정의된다.
기본적으로 소스 를 사용하는 것은 키보드에서 스크립트의 각 줄을 쓰는 것과 같습니다.
한쪽에서는 현재 쉘의 모든 특정 히스토리를 상속하지만 다른 쪽에서는 현재 쉘이 스크립트 및 module
호출 의 모든 부작용에 영향을 받습니다.
약 스크립트를 소스에 그것을 실행의 차이점 은 슈퍼 유저에 읽을 수 2009년 9월 또는 2009년 12월 , 우분투 2011년 2월 , 유닉스 2011년 8월 , 유래 2012 12월 또는 여러 다른 장소에서합니다.
이와 관련하여 Modulefiles 섹션 에는 경고가 있습니다 .
... 모듈 파일을 언로드 할 때 환경 변수가 설정되지 않습니다. 따라서 환경 변수가 이전 상태로 돌아 가지 않고 모듈 파일을로드 한 다음 언로드 할 수 있습니다.
따라서 스크립트에서 실행하는 것이 더 현명 해 보입니다 .
후자를 달성하기 위해 나는 생각할 수 있습니다 :
대화식 쉘 을 사용하려면 현재 쉘의 특정 히스토리를 무시하고 다음 과 같이 스크립트 의 shebang 을 수정하십시오.
#!/bin/bash -i
대화식 쉘은 tty의 사용자 입력에서 명령을 읽습니다. 무엇보다도 이러한 쉘은 활성화시 시작 파일을 읽고 프롬프트를 표시하며 기본적으로 작업 제어를 활성화합니다 ...
대신 현재 쉘의 특정 스토리를 상속하려는 경우 소스 쉘을 시도 할 수 있지만 서브 쉘에서
( source runit.sh )
현재의 별칭 / 기능을 찾아보십시오 module
와 type module
다음 결과에 스크립트를 수정합니다. 일부 환경 변수는로 설정할 수 없습니다 module
.
원하는 경우 디렉토리에서 초기화 스크립트를 찾을 수 있습니다 $MODULESHOME/init/<shell>
.
코멘트
에 기억하고 모듈 Q & A
하위 프로세스 (스크립트)는 상위 프로세스 환경을 변경할 수 없습니다. 스크립트의 모듈로드는 스크립트 자체의 환경에만 영향을줍니다. 스크립트가 현재 환경을 변경할 수있는 유일한 방법은 스크립트를 현재 프로세스로 읽는 스크립트를 소싱하는 것입니다.
따라서 현재 환경을 수정하지 않으려면 shebang 을 변경 하거나 (1) 하위 셸 에서 스크립트를 소싱하는 것이 좋습니다 (2). 나는 사건의 유용성에 대해 완전히 확신하지 못한다 (3).
참고 모듈의
매뉴얼 및 설명 페이지에서 발췌
module
모듈 패키지에 대한 사용자 인터페이스입니다. module
별칭 또는 기능은 실행 modulecmd
프로그램을 쉘 명령의 출력을 평가하고있다. modulecmd
쉘 유형 을 지정하는 첫 번째 인수 입니다.
쉘 특정 초기화 스크립트가 쉘에 소스 될 때 모듈 패키지 및 module
명령 이 초기화됩니다 . 스크립트는 별명 또는 쉘 함수로 모듈 명령을 작성하고 모듈 환경 변수를 작성합니다.