리눅스(RedHat) `sudo su -l <>`구성 파일을 제공하지 않습니다

리눅스(RedHat) `sudo su -l <>`구성 파일을 제공하지 않습니다

<<user_acct>>앞서 언급했듯이 기본 구성 파일을 로드하는 데 문제가 있습니다 sudo su -l <<user_acct>>.

안에 .profile,

if [ -r "${HOME}/.profile.custom" ]; then
    . "${HOME}/.profile.custom"
fi

내가 읽은 내용을 바탕으로(예: 이와 유사한 답변)하나), -l로그인 쉘을 트리거했어야 했고 fetch 가 실행되었지만 .profile에 설정된 환경 변수가 존재하지 않기 때문에 작동하지 않는 것 같습니다 (반면 .profile.custom에 방금 실행하면 . .profile표시될 것입니다).

수정된 질문: 이유가 무엇인지 또는이 문제를 해결하는 방법?

답변1

로그인 쉘일 때, bash는 그것을 먼저 찾습니다 ~/.bash_profile. 찾지 못하면 찾습니다 ~/.bash_login. 찾지 못하면 검색합니다 ~/.profile. 어쨌든, 로그인 쉘이 대화형이더라도 bash는 이를 읽지 않습니다 ~/.bashrc.

다음 사항을 준수 ~/.bash_profile하고 다음 사항을 수행하지 않는 것이 좋습니다 ~/.bash_login.

if [ -e ~/.profile ]; then . ~/.profile; fi
case $- in *i*) if [ -e ~/.bashrc ]; then . ~/.bashrc; fi;; esac

이렇게 하면 .profile로그인 쉘이 bash인지 다른 sh 변형인지에 관계없이 로드되고 .bashrc쉘이 로그인 쉘인지 여부에 관계없이 bash에 의해 로드됩니다.

답변2

하지 마세요 sudo su. 필요하지 않습니다. sudo -i -u loginname당신이 원하는 것.

답변3

질문 작성자는 다음과 같은 해결책을 제시합니다.

결국 나는 내 문제에 대한 해결책을 찾았습니다. 그것은 매우 사소한 것으로 판명되었습니다. 환경 변수를 설정하여 .bash_profile설정하기만 하면 됩니다.

bash맨페이지 에 따르면 , 논의한 대로여기,

bash가 --login 옵션을 사용하여 대화형 로그인 셸 또는 비대화형 셸로 호출되면 먼저 /etc/profile 파일(파일이 있는 경우)에서 명령을 읽고 실행합니다.파일을 읽은 후 ~/.bash_profile, ~/.bash_login, ~/.profile을 순서대로 찾아 존재하고 읽을 수 있는 첫 번째 파일부터 명령을 읽고 실행합니다.이 동작은 셸을 시작할 때 --noprofile 옵션을 사용하여 비활성화할 수 있습니다.

..핵심은첫 번째존재하는 것.

교훈: "세세한" 활자체 읽기

관련 정보