루트가 .bash_profile을 얻지 못하는 이유는 무엇입니까?

루트가 .bash_profile을 얻지 못하는 이유는 무엇입니까?

su(대신 )을 사용하여 su -루트로 로그인하려고 할 때마다 .bash_profileuser1의 홈 디렉토리에서 시작되지 않습니다.

기본적으로 내 /var/root디렉토리에는 해당 항목이 없으므로 테스트 를 위해 .bash_profile복사본을 넣었습니다 ..bash_profile/var/rootsu -

또한 .bash_profile(에서 var/root) 자동으로 소스를 제공하지 않습니다.

.bash_profile어쨌든 .dll 을 사용할 때 루트 계정에서 user1을 자동으로 가져오고 싶습니다 su.

어떻게 해야 합니까?

(이전에는 작동했어요! 어느 날 소스가 안 나오더라구요! 혹시 bash 설정이 좀 바뀌었나요? source .bash_profile로그인 후 입력하니 작동하더군요.)

저는 Mac과 OS X Yosemite를 사용하고 있습니다.

답변1

rootOS X의 기본 셸은 의 버전 /bin/sh이기도 하지만shbashshBash 라는 이름으로 호출될 때:

shPOSIX 표준을 준수하면서 기록 버전의 시작 동작을 최대한 유사하게 모방하십시오.

대화형 로그인 셸 또는 options 가 포함된 비대화형 셸로 호출되면 --login먼저 시도합니다.에서 명령을 순서대로 /etc/profile읽고 실행합니다 . ~/.profile...sh로 호출된 쉘은 다른 시작 파일에서 명령을 읽고 실행하려고 시도하지 않습니다.

.bash_profile전혀 읽히지 않는다.로그인 쉘로 호출되는지 여부에 관계없이. .profile대신 사용하거나 서로 심볼릭 링크할 수도 있습니다 . 시작 로그인 셸을 사용하면 시작 시 로드되지만 su -l로드 되지는 않습니다..profile.bash_profile


당신은 또한 수사용dscl루트 쉘을 변경하십시오(참고 /etc/passwd:아니요OS X에서 쉘을 결정하는 데 사용됩니다). 를 사용하여 루트의 현재 쉘을 확인할 수 있습니다 dscl . -read /Users/root UserShell. 문서를 참조하고 다른 것으로 변경하기 전에 신중하게 생각해 보십시오.

su또 다른 접근 방식은 즉시 실행 되도록 호출을 변경하는 것입니다 bash.

당신이 말한 내용을 고려하면 아마도 심볼릭 링크를 권장하지만 Bash의 변경 사항을 살펴보고 싶을 수도 있습니다.POSIX 모드갖고 싶은지 만들고 결정하세요.

답변2

login"로그인 셸"( 또는 에서 직접 호출 sshd)로 간주되지 않고 단순히 "대화형 셸"로 간주되기 때문입니다. 여기 예를 참조하세요:https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

따라서 su로그인 옵션을 강제로 사용하십시오. 즉, -l다음 옵션을 사용하십시오.

su -l

또는 환경을 .bashrc파일에 넣으십시오.

답변3

로그인 쉘을 호출하지 않았기 때문에 루트 사용자는 .bash_profile 대신 .bashrc 파일을 실행하려고 시도합니다.

Bash 매뉴얼에서 man bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

.bashrc 파일 은 ~루트 사용자의 홈 디렉터리에 있어야 합니다.

실제로 귀하의 질문에 대답하기 위해 user1의 .bashrc 파일을 사용하려면 user1의 소스 .bashrc와 루트 사용자 사이에 (기호적) 링크를 만드는 것이 좋습니다.

. /homedirectory/of/user1/.bash_profile루트 사용자의 .bashrc 파일에 해당 행을 추가하여 user1의 .bashrc 또는 .bash_profile을 가져오는 것을 고려할 수도 있습니다.

관련 정보