내 .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
source
or 명령을 사용할 때 .
기본적으로 bash에서는 파일 인수에 문자가 $PATH
포함되어 있지 않으면 검색됩니다 /. 당신이 원하는
source ./.topic1rc
또는
shopt -u sourcepath
source .topic1rc