사용자 계정에 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
~/.profile
bash
~/.profile