저는 OpenSolaris 파생 버전(Illumos/OpenIndiana 배포판인 OmniOS)에서 정상적인/사용 가능한 환경을 설정하려고 합니다. 시스템 전체에서 사용하기 위해 .profile, .inputrc 및 .bashrc 파일에 필요한 모든 파이핑 코드가 있지만 비로그인 셸을 위한 시스템 전체 스크립트는 없습니다. Bash는 사용자의 .bashrc 파일을 su에 로드하려고 시도하지만 $HOME(및 기타 환경 변수)은 이전 사용자가 구성한 대로 유지됩니다.
직접(SSH) 로그인에 대한 출력:
login as: myuser
Using keyboard-interactive authentication.
Password:
/etc/profile run
myuser's .bashrc run
myuser's .profile run
myuser@Helios:~$ echo ~
/home/myuser
myuser@Helios:~$
출력 전환 사용자:
root@Helios:/etc# su myuser
bash: /root/.bashrc: Permission denied
bash-4.2$ id
uid=1001(myuser) gid=100(users) groups=100(users),27(sudo)
bash-4.2$ echo ~
/root
bash-4.2$
myuser의 .bashrc 대신 루트의 .bashrc를 가져오는 데 특별한 주의를 기울이십시오.
su(추가 매개변수 없이)는 항상 Ubuntu, Fedora 등에서 원활하게 작동하며 이 경험을 재현하려고 합니다. 하지만 시스템 전체 스크립트가 실행되지 않고 사용자의 스크립트를 찾을 수 없는 경우 어떻게 해야 합니까? 나는 OmniOS 버전의 bash 및/또는 su가 뭔가 빠졌다고 비난하는 경향이 있지만 정확히 올바른 동작은 무엇입니까? $HOME 및 기타 환경 변수 업데이트 실패를 수정하기 위해 추가 파이프를 구성/액세스/작성할 수 있는 곳이 있습니까?
추가 설명:
- OmniOS에는 man bash가 없습니다(적어도 MANPATH=/opt/omni/share/man:/opt/mysql55/man:/opt/gcc-4.4.4/man:/usr/gnu/share/man을 사용하지 않음: /usr/local/man:/usr/local/share/man:/usr/man:/usr/share/man)
- /etc/bashrc 및 /etc/bash.bashrc는 절대로 소스가 제공되지 않습니다(이것은 분명히 배포판별 규칙이므로 예상되지만 Ubuntu는 .bashrc를 참조하지 않고 이러한 파일을 로드하는 것 같습니다).
답변1
이것su
HOME
이 명령은 Solaris에서 환경 변수를 변경하지 않습니다 . 이것이 작동하는 방식입니다. Linux 및 *BSD에서는 su
재설정이 수행됩니다 HOME
. 이것이 BSD/SysV의 차이점이라고 생각합니다. Bash는 완전히 정상적으로 작동합니다. 로드를 시도하지만 여전히 이기 ~/.bashrc
때문에 입니다 .HOME
/root
/root/.bashrc
아이디어는 su
루트 권한을 얻을 때 실행하는 쉘 및 기타 프로그램이 여전히 홈 디렉토리에서 구성 파일을 찾는다는 것입니다. 대상 사용자의 환경을 원하면 를 실행할 수 있습니다 su -
.
설정하고 싶지만 HOME
환경을 변경하지 않고 유지하려면 명시적으로 설정하세요.
HOME=~myuser su myuser
Bash가 시스템 전체 파일을 로드하는지 여부는 컴파일 타임 옵션입니다. 이 옵션은 Ubuntu에서는 활성화되어 있지만 OmniOS에서는 비활성화되어 있습니다.
답변2
귀하의 애플리케이션이 SMF를 활용할 수 있습니까? 그렇다면 애플리케이션에 대한 서비스를 설정하는 것이 더 쉬울 수 있습니다.
SMF에서 사용할 XML을 매우 쉽게 생성할 수 있는 Python 스크립트를 본 적이 있습니다.
다양성