함수 정의를 .bashrc에 소스화하고 .profile에서 읽도록 할 수 없는 이유는 무엇입니까?

함수 정의를 .bashrc에 소스화하고 .profile에서 읽도록 할 수 없는 이유는 무엇입니까?

3개의 구성 파일이 있습니다: .bashrcsource .bashrc_common.profilesource .bashrc. 불행하게도 Gnome에 로그인할 때 in .bashrc명령을 찾을 수 없다는 오류 메시지가 나타납니다 . foo그런데 foo소스 파일에 정의되어 있는데 .bashrc왜 찾을 수 없나요?

# .profile

if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi
# .bashrc_common

function foo {
    echo "foo $1"
}

# .bashrc

source $HOME/.bashrc_common
#.....
foo "hello"

이것은 foo터미널 bash 쉘의 모든 곳에서 작동하며 오류가 발생하는 Ubuntu 로그인일 뿐입니다.

답변1

.bashrc에서 얻은 파일에는 비대화형으로 호출할 때 실행을 방지하는 명시적인 보호 기능이 있습니다. 이야기의 교훈은 - Gnome 실행 구성 파일에 문제가 있는 경우 명시적인 "대화형 쉘에서만 실행" 검사가 없는지 다시 확인하십시오.

답변2

귀하의 GNOME은 대화형 비로그인 쉘이 아닌 로그인 쉘을 실행하고 있는 것 같습니다. 그 이유는bashrc출처가 없습니다.

그냥 끝에 추가하세요.bash_login다음과 같은:

source ~/.bashrc

관련 정보