ksh가 쉘인 경우 bash를 사용하십시오.

ksh가 쉘인 경우 bash를 사용하십시오.

사용자 계정에 Active Directory를 사용하고 홈 디렉토리에 NFS 마운트를 사용하는 여러 RHEL 시스템에 액세스할 수 있습니다.

우리의 로그인 셸은 Active Directory에 저장되어 있으며 항상 사용할 수 있습니다 /bin/ksh. 저는 이를 영원히 갖고 싶기 /bin/bash때문에 .NET에서 이것을 구현할 수 있다고 생각했습니다 ~/.profile. 여기와 SO에 대한 몇 가지 기사를 읽은 후 다음과 같은 결론을 내렸습니다.

if [ ! -n "$BASH" ] ;then
    SHELL=`type -P bash`
    exec bash -l;
fi
  • 이것이 표준/좋은 방법입니까?
  • ! -n "$BASH"나는 그것을 다음 과 같이 읽었다 .NOT ("$BASH" is NOT null)
    • 그래서 true비어 있으면 false비어 있지 않으면.
    • 그렇다면 왜 그냥 -z "$BASH"또는 심지어 는 안됩니까 ! "$BASH"?

답변1

표시되는 코드는 파일 bash에서 로그인 셸을 시작하는 데 사용될 가능성이 높습니다 ~/.profile. 개인적으로 나는 command이것이 다음과 같이 존재하는지 확인 하고 싶습니다 bash.

if [ -z "$BASH" ]; then
    shell=$( command -v bash )
    if [ -n "$shell" ]; then
        exec env SHELL="$shell" bash --login
    fi
    unset shell
    echo 'Bash not present, continuing...' >&2
fi

bash이는 경로를 얻은 다음 사용 가능한지 $shell여부를 테스트하는 데 사용됩니다.bash그리고SHELL환경 변수를 설정합니다 bash.

[ ! -n "$BASH" ]또는를 사용하는지는 중요하지 않습니다 [ -z "$BASH" ]. 따라서 옳다고 느껴지고 읽기 가장 쉬운 것을 사용하십시오.아니요! [ "$BASH" ]또는 를 사용하세요 [ ! "$BASH" ]. 일반적으로 대시로 시작하는 문자열을 테스트하게 되어 테스트가 혼란스러울 수 있으므로 -n문자열이 비어 있는지 테스트할 때 또는 를 사용하는 것이 좋습니다.-z

~/.profile어느 날 시스템 관리자가 제거 bash하고 대신 별도의 파일을 작성하기 로 결정한 경우 ~/.bash_profile기본적으로 동일하게 유지하고 싶을 수도 있습니다(위 제외). 사용 가능한 경우 bash쉘이 대신 사용되며 시작 실패로 인해 가능한 bashism에 문제가 발생하지 않고 기본 로그인 쉘이 성공적으로 사용됩니다.~/.bash_profile~/.profilebash~/.profile

관련 정보