root가 왜 .bash_profile을 소스하지 않습니까? 디렉토리에서 소스가되지 않습니다

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

기본적으로, 내 /var/root디렉토리가없는 .bash_profile나는의 사본을 넣어, 그래서 .bash_profile에서 /var/root테스트 su -.

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

어쨌든, .bash_profile내가 사용할 때 user1을 루트 계정으로 자동으로 만들고 싶습니다 su.

어떻게해야합니까?

(이전에는 효과가있었습니다. 언젠가는 소스가 아닙니다! bash의 설정이 변경 되었습니까? source .bash_profile로그인 후 입력하면 작동합니다 .)

Mac 및 OS X Yosemite를 사용하고 있습니다.



답변

rootOS X에서 기본 쉘 은 /bin/sh입니다. 그것 sh의 버전 bash이지만 Bash 라는 이름으로 호출 될 때sh :

shPOSIX 표준을 준수하면서 가능한 한 역사적으로 오래된 버전의 시작 동작을 모방하려고 시도합니다 .

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

즉, 그것은 읽지 않습니다 .bash_profile, 전혀 관계없이 로그인 쉘 여부로 호출되었는지 여부 . .profile대신 사용할 수도 있고 서로 연결할 수도 있습니다 . 당신이 로그인 쉘을 실행하는 경우 su -l, .profile시작시로드,하지만 .bash_profile결코 것입니다.


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

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

당신이 말한 것을 감안할 때, 나는 아마도 심볼릭 링크를 권하고 싶습니다,하지만 당신은 강타의 그 변화를 조사 할 수 있습니다 POSIX 모드를 하게하고 당신이 그들을이 없거나할지 여부를 결정합니다.


답변

“로그인 쉘”( login또는 에서 직접 호출 됨)으로 간주되지 sshd않고 단순한 “대화식 쉘” 로 간주되기 때문입니다 . 예를 들어 여기를 참조하십시오 : https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

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

su -l

또는 환경을 .bashrc파일 로 저장하십시오.


답변

루트 사용자는 로그인 쉘을 호출하지 않으므로 .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 파일이 루트 사용자의의 homedirectory에있을 필요가있는.

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

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


답변