su
(not su -
)을 사용하여 루트로 로그인하려고 할 때마다 .bash_profile
user1의 홈 디렉토리에서 소스가되지 않습니다 .
기본적으로, 내 /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를 사용하고 있습니다.
답변
root
OS X에서 기본 쉘 은 /bin/sh
입니다. 그것 sh
의 버전 bash
이지만 Bash 라는 이름으로 호출 될 때sh
:
sh
POSIX 표준을 준수하면서 가능한 한 역사적으로 오래된 버전의 시작 동작을 모방하려고 시도합니다 .대화식 로그인 쉘 또는
--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을 소싱하는 것도 고려할 수 있습니다 .