나는 두 개의 다른 시스템에서 새로운 Oneiric 설치 (즉, 업그레이드가 아님)를 실행하고 있으며 겉보기 관련 문제와 동일한 세트로 실행됩니다.
가장 실망스러운 점은 Mac OS X에서 나와 .profile 및 .bashrc를 사용할 때 LightDM을 통해 X에 로그인하면 즉시 로그 아웃된다는 것입니다. 나는 이것이 "/ bin / sh"를 실행할 때 / bin / dash처럼 동작하지만 $ SHELL 변수가 / bin / bash로 설정되어 있기 때문이라고 생각합니다.
외삽
나는 거대한 .bashrc
있습니다. 원한다면 여기에서 볼 수 있지만 bashism으로 가득 차 있다는 사실과 xterm 또는 가상 콘솔에서 오류없이 작동한다는 사실 외에는 내용이 관련이 없을 것입니다.
내 .profile
모습은 다음과 같습니다 (약어) :
case $SHELL in
*bash*)
if [ -f $HOME/.bashrc -a -r $HOME/.bashrc ]; then
. $HOME/.bashrc
fi
;;
esac
LightDM을 통해 X에 로그인을 시도하면 즉시 다시 로그 아웃됩니다. .xsession-errors
.bashrc와 관련하여 다음과 같은 오류가 발생 합니다 (약어).
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
내가 말했듯이 가상 콘솔에서 bash를 실행할 때 이러한 오류가 발생하지 않습니다. 또한 .profile을 제거하면 X에 정상적으로 로그인 할 수 있습니다. (또한 가상 콘솔에 로그인 startx
하여 작동하는 X 세션을 시작하는 데 사용할 수도 있지만 이것은 장기적인 해결책이 아닙니다.)
그러나, 나는 내가 실행하면 것을 발견 /bin/sh -l
, 내가 않는 오류를 얻을. 다음은 예제 세션입니다 (참고 : bash 프롬프트를 단순화 bash>
하고 sh 프롬프트는 그냥 $
).
bash> echo $SHELL
/bin/bash
bash> echo $BASH_VERSION
4.2.10(1)-release
bash> /bin/sh -l
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
$ echo $SHELL
/bin/bash
$ echo $BASH_VERSION
$
Q1 : 왜 이런 일이 발생합니까?
나는 / bin / sh가 bash가 아닌 dash를 가리킨다 는 것을 이해 하지만, 그것이 사실이라면 왜 $SHELL
여전히 돌아 오는가 /bin/bash
?
Q2 :이 문제를 해결하려면 어떻게해야합니까?
이 문제를 해결하는 방법이 있습니까? 로그인 및 비 로그인 쉘 모두에서 동일한 환경을 갖도록 프로파일을 .bashrc로로드하고 싶지만 분명히 bash로 가장하는 / bin / sh가 아닌 bash 자체에 대해서만로드하기를 원합니다.
위의 $ BASH_VERSION 변수의 내용에 차이가 있음을 알 수 있습니다. 내 .profile을 다음과 같이 포장하려고 시도했습니다.
if [ -n $BASH_VERSION ]; then
# the rest of my .profile as above
fi
-n
문자열의 길이가 0이 아닌 경우에만에서 내가 실행 해요 때 테스트는 위의 세션에서 비록하지만, true를 돌려 /bin/sh -l
그것은이처럼 내의 .profile에 포함 $ BASH_VERSION 빈 문자열을 반환 테스트를 통과했습니다! 그것들은 내 .bashrc를 소스 화하고 이전과 같은 오류를냅니다.
지금 정말 혼란 스러워요.
$SHELL
/etc/passwd
(또는 getent passwd
) 의 마지막 필드가 무엇이든 상관 없습니다 .
~/.profile
에 bash 전용 환경에 넣고 소스를 모두 ~/.bashrc
가지고 있어야 ~/.bash_profile
합니다.
dash -l
또한$SHELL
값이 있음 을 보여줍니다/bin/bash
.