bash 스크립트에서 생성된 함수를 .bashrc의 함수처럼 유지하려면 어떻게 해야 합니까?

bash 스크립트에서 생성된 함수를 .bashrc의 함수처럼 유지하려면 어떻게 해야 합니까?

내 .bashrc가 약간 길어져서 테마에 따라 더 작은 파일로 분할한 다음 아래와 같이 .bashrc에서 이 파일을 호출하기로 결정했습니다.

#my long .bashrc file
bash .topic1rc
bash .topic2rc

그러나 이러한 첨자 중 하나 내에서 bash 함수를 만듭니다. 불행히도 모든 것을 덩어리로 나누기 전처럼 더 이상 작동하지 않습니다. .bashrc 파일을 여러 개의 청크로 분할하면서도 내가 생성한 변수와 함수에 계속 액세스하려면 어떻게 해야 합니까?

답변1

귀하의 질문을 올바르게 이해했다면 귀하의 문서가 필요 source합니다 .. 예를 들어, 귀하의 .bashrc주문 및 유지 관리(귀하만 알고 있음):

source .topic1rc
source .topic2rc

source.사용 편의성을 위해 명령줄에서 이 명령을 단축할 수 있습니다. 이는 정확히 동일한 명령입니다. 그것이 하는 일은 source호출된 스크립트를 효과적으로 인라인하는 것입니다.

답변2

bash .topic1rc각 프로세스가 새로운 bash 쉘을 하위 프로세스로 호출하고 환경, 쉘 변수 또는 함수와 통신할 방법이 없기 때문에 수행 중인 작업이 작동하지 않습니다.뒤쪽에관심 있는 bash 쉘인 상위 프로세스로 이동합니다.

당신이 원하는 것은 이 .명령을 사용하는 것입니다. (더 자세한 명령도 가능합니다 source. 두 명령 모두 동일한 작업을 수행합니다.) 이는 새 쉘이 아닌 현재 쉘에서 지정된 스크립트를 읽습니다. 그래서:

#my long .bashrc file
. ~/.topic1rc
. ~/.topic2rc

(주로 로그인할 때 main이 실행되고 홈 디렉토리가 초기 작업 디렉토리이기 때문에 경로를 생략하는 거의 모든 용도에 대해 잘 작동할 것입니다. ~/.bashrc그러나 철자를 명시하는 것이 더 좋습니다.)

답변3

다른 사람들이 설명했듯이 이러한 스크립트는 실행 후 종료되는 새 셸에서 실행됩니다. 파일 소스를 얻으려면 다음 방법 중 하나를 사용해야 합니다.

. .topic1rc

또는

source .topic1rc

더 추가하려는 경우 .bashrc 편집이 필요하지 않은 약간 더 고급 솔루션을 만들 수도 있습니다.조각미래.

모든 구성 파일을 하나의 디렉터리(예: )에 넣은 다음 해당 디렉터리를 파일의 유일한 콘텐츠 ~/.bash.d로 만들 수 있습니다 ..bashrc

if [[ -d ~/.bash.d ]]
then
    for conf_file in ~/.bash.d/*
    do
        if [[ -f $conf_file ]]
        then
            source "$conf_file"
        fi
    done
fi

이렇게 하면 .bash.d 아래의 모든 bash 구성 파일을 가져오고 파일 이름에 따라 알파벳 순서로 가져오므로 이 작업이 발생하는 순서를 제어할 수 있습니다.

답변4

sourceor 명령을 사용할 때 .기본적으로 bash에서는 파일 인수에 문자가 $PATH포함되어 있지 않으면 검색됩니다 /. 당신이 원하는

source ./.topic1rc 

또는

shopt -u sourcepath
source .topic1rc

관련 정보