내가 일하고있는 유닉스 sysadmin은 로그인 쉘을에서 (으) ksh
로 변경하기 위해 액세스를 꺼려 합니다 bash
. 그는 다양한 변명을주었습니다. 가장 재미있는 것은 그들이 모든 스크립트를 작성했기 때문에 ksh
내가 실행하려고하면 작동하지 않을 것입니다. 그가이 아이디어를 어디서 얻었는지 모르겠지만 설득 할 수 없기 때문에 대안이 있습니까?
( chsh
이 컴퓨터에 설치되어 있지만 로그인을 위해 공개 / 개인 키 쌍을 사용하는데 비밀번호가 없으므로 비밀번호를 chsh
묻는 메시지가 표시 되면 아무 것도 제공하지 않습니다.)
답변
~/.profile
로그인하면 로그인 쉘 (ksh) 이 파일 을 읽습니다. 해당 로그인 쉘이 bash로 대체되도록 지시 할 수 있습니다. 몇 가지 예방 조치를 취해야합니다.
- 대화식 인 경우 로그인 쉘만 교체하십시오. 이것은 중요합니다. 그렇지 않으면 그래픽 모드로 로그인하는 것이 작동하지 않을 수 있습니다 (시스템에 따라 다름 : 일부 시스템
~/.profile
은 xdm 또는 이와 유사한 방식으로 로그인 할 때 일부 시스템을 읽지 못함 )ssh foo '. ~/.profile; mycommand'
. - bash가 사용 가능한지 확인하여 어떤 이유로 실행 파일이없는 경우에도 로그인 할 수 있습니다.
bash를 로그인 쉘로 실행할지 여부를 선택할 수 있습니다. 로그인 쉘로 만드는 유일한 차이점은로드 ~/.bash_profile
또는 ~/.profile
입니다. 따라서 bash를 로그인 쉘로 ~/.bash_profile
실행하는 경우 bash를 재귀 적으로 실행하지 않도록주의하십시오 ~/.profile
. ~/.profile
ksh가 아닌 bash로 실행하면 실제로 이점이 없으므로 수행하지 않는 것이 좋습니다.
또한 SHELL
터미널 변수와 같은 프로그램이 해당 셸을 호출하도록 환경 변수를 bash로 설정하십시오 .
bash로 전환하는 코드는 다음과 같습니다. 끝에 넣습니다 ~/.profile
.
case $- in
*i*)
# Interactive session. Try switching to bash.
if [ -z "$BASH" ]; then # do nothing if running under bash already
bash=$(command -v bash)
if [ -x "$bash" ]; then
export SHELL="$bash"
exec "$bash"
fi
fi
esac
답변
이것은 약간 엉뚱하지만 bash
로그인하면 .profile
홈 디렉토리에 파일 을 만들어서 사용중인 쉘이 될 수 있습니다.
SHELL=`type -P bash`
exec bash -l
ksh
세션 이 세션으로 대체됩니다 bash
. 로그인 할 때마다 새 세션 을 수동으로 시작한 것처럼 두 번 입력 exit
(또는 ^D
) 하지 않아도됩니다 bash
.
echo $SHELL
로 경로를 반환합니다 bash
.
답변
Giles의 답변에는 bash를 실행할 때 -l 플래그가 추가되어 로그인 프로파일 스크립트가 새 bash 셸에서 제공됩니다. (예를 들어 RHEL의 /etc/profile.d/에있는 항목). 스크립트는 다음과 같아야합니다.
case $- in
*i*)
# Interactive session. Try switching to bash.
if [ -z "$BASH" ]; then # do nothing if running under bash already
bash=$(command -v bash)
if [ -x "$bash" ]; then
export SHELL="$bash"
exec "$bash" -l
fi
fi
esac
답변
csh/tcsh
@Gilles가 뽑은 상위권 에서 영감 을 얻은 답변 은 다음과 같습니다.
if ( ! $?BASH ) then
setenv BASH `command -v bash`
endif
if ( $?prompt ) then
if ( -x "$BASH" ) then
exec "$BASH"
endif
endif
답변
솔라리스 :
usermod -s /bin/bash root