메인 쉘에서는 별칭을 사용할 수 있지만 서브 쉘에서는 사용할 수 없는 이유는 무엇입니까?

메인 쉘에서는 별칭을 사용할 수 있지만 서브 쉘에서는 사용할 수 없는 이유는 무엇입니까?

나는 어떤 텍스트를 읽고 있었는데 다음과 같이 적혀 있습니다.

.bashrc 셸 구성 파일은 셸 스크립트를 실행할 때와 같이 BASH 셸을 생성할 때마다 실제로 실행됩니다. 즉, 서브쉘이 생성될 때마다 .bashrc 파일이 실행됩니다. 이는 .bashrc 셸 초기화 파일에 정의한 지역 변수나 별칭을 내보내는 효과가 있습니다.

나는 또한 쉘 스크립트를 실행할 때마다(예를 들어script1.sh), 서브쉘이 생성됩니다. 따라서 이 서브쉘이 생성되면,.bashrc파일이 실행되어야 하며 그에 따라 별칭이 정의됩니다..bashrc서브셸에서 사용할 수 있어야 합니다(그렇지 않음). 그리고 이 하위 쉘에서 별칭을 사용할 수 없는 경우 기본 쉘(스크립트를 실행하는 데 사용)에서 어떻게 사용할 수 있습니까?

답변1

맞아요, 리눅스의 bash 쉘에서는 이렇게 말할 수 있어요

source /path/to/my_lib.sh

파일에서 별칭 정의를 로드합니다. 또는 복잡성을 낮추기 위해 bash 스크립트에 해당 별칭 정의를 복사하면 됩니다.

하지만 기다려! 이것은 아마도 다음과 같은 별칭만 생성할 것입니다.

alias foo3 foo9  # describe these two aliases: declare errors if one doesn't exist

새로운 별칭 정의가 마음에 들겠지만 다음을 사용하여 별칭 확장을 활성화하기 전에는 실행이 실패할 것입니다.

shopt -s expand_aliases # alias xpn ON

다음 사항도 고려하세요.

shopt -u expand_aliases # alias xpn OFF

또는

shopt  expand_aliases   # query whether

또는

unalias foo3 foo9 # delete these aliases 

답변2

별칭을 정의했고 script1.sh이를 어디에서나 사용할 수 있도록 하려면 .bashrc파일에 다음을 추가하세요.

source /path/to/script1.sh

또는 대안적으로:

. /path/to/script1.sh

스크립트가 존재하지 않는 경우 오류를 방지하려면 다음을 사용할 수 있습니다.

if [ -f /path/to/script1.sh ]; then source /path/to/script1.sh; fi

에서 정의한 모든 함수에 대해서도 동일하게 작동합니다 script1.sh.

관련 정보