zsh
학교 컴퓨터를 사용하고 있는데 대신 사용하고 싶습니다 bash
. 이를 기본 쉘로 만들고 싶지만 $ chsh -s $(which zsh)
관리자 권한이 없어서 명령을 실행할 수 없습니다.
.bashrc
내 콘텐츠에 무언가를 넣는 방법이나 해결 방법으로 열 때 자동으로 호출되는 무언가가 있습니까 ?zsh
명확히 말하면 zsh
이미 설치되어 있습니다.
답변1
.bash_profile
홈 디렉터리에 다음 줄을 만들고 추가합니다.
export SHELL=/bin/zsh
exec /bin/zsh -l
업데이트: .profile
기본 셸이 bash가 아닌 경우 일반 솔루션으로 사용할 수 있습니다. .profile
Zsh가 이것을 호출할 수 있는지 확실하지 않고 중복될 수도 있지만 간단한 확인만으로 안전하게 수행할 수 있습니다.
export SHELL=/bin/zsh
[ -z "$ZSH_VERSION" ] && exec /bin/zsh -l
다음을 사용하여 종속 값의 동적 경로를 얻을 수도 있습니다 which
.zsh
$PATH
export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
답변2
일반적으로 chsh
이를 루트가 아닌 사용자로 사용할 수 있습니다. 그러나 일반적으로 특정 형태의 네트워크 사용자 데이터베이스(예: NIS 및 LDAP)를 사용하는 사이트에서는 비활성화되는 경우가 있습니다. ypchsh
(NIS) 또는 (LDAP) 가 있을 수 있습니다 chsh.ldap
.
chsh
일반적으로 일부만 허용됩니다.공식적으로 인정됨쉘, 일반적으로 /etc/shells
.
chsh
귀하의 사이트 또는 그 변형에서 작동 하지 않는 경우 로그인 셸을 exec
즐겨찾는 셸로 예약하고 SHELL
변수가 즐겨찾는 셸을 가리키도록 설정하세요.
로그인 쉘이
sh
,dash
또는 인 경우ksh
편집해야 하는 파일은 입니다~/.profile
. 대화형 세션이 시작될 때 일부 비대화형 세션 시작 스크립트(예: X11 세션)에서 파일을 읽으므로 주의하세요. :exec
현재 프로세스(현재 프로세스를 대체) 셸이 대화형일 때만 호출됩니다. Bourne 쉘(Solaris 10 및 이전 버전)을 제외하고/bin/sh
옵션 목록( )에 쉘이 있으면 쉘이 대화형임을 알 수 있습니다.i
$-
preferred_shell= if [ -x /bin/zsh ]; then preferred_shell=/bin/zsh fi … if [ -n "$preferred_shell" ]; then case $- in *i*) SHELL=$preferred_shell; export SHELL; exec "$preferred_shell";; esac fi
zsh가 귀하의 것을 읽도록 하려면
.zprofile
이-l
옵션을 전달하십시오.로그인 쉘이 인 경우
bash
위의 단계를 수행할 수 있습니다. 또는 이러한 명령 을~/.bash_profile
. .~/.profile
~/.bash_profile
.bash_profile
exec
로그인 셸이 csh 또는 tcsh인 경우 다음 예를 참조하세요.chsh 또는 관리자 권한 없이 기본 쉘 변경
답변3
chsh
관리자권한이 없어 실행이 안되는 경우이런 일을 하는 사람들과 이야기해 보세요.
chsh
사용 중인 시스템이 작동하지 않도록 구성되었기 때문에 루트가 아닌 사용자로 사용할 수 없을 가능성이 높습니다. chsh
예를 들어 시스템이 파일 대신 NIS 또는 LDAP를 사용하기 때문입니다 /etc/passwd
. 또는 시스템 관리자가 일부 제어를 유지하기를 원할 수도 있습니다.
셸 변경 프로세스는 조직의 정책에 따라 다릅니다. chsh
일반적으로 수행하는 작업을 수행하는 로컬 명령이 있을 수 있습니다 . 또는 쉘 변경을 요청하려면 지원 티켓을 제출해야 할 수도 있습니다.
다른 답변의 대부분은 좋지만 관리자가 합리적으로 응답하면 시작 스크립트를 해킹하는 것을 방해하고 싶지 않을 것입니다. zsh -l
관리자가 내 계정 업데이트를 시작할 때까지 로그인한 후 수동으로 호출 할 수도 있습니다 .
명심해야 할 또 다른 사항은 때때로 서로 다른 쉘이 동일한 시작 파일을 사용할 수 있다는 것입니다. 예를 들어, sh
및 는 bash
실행될 수 있으며 $HOME/.profile
및 에 의해 실행될 csh
수 있습니다(단 , , 및 와 같은 셸 특정 시작 파일은 이러한 파일을 재정의할 수 있음). 기본 셸이 이고 이를 사용하려는 경우 호출을 업데이트하면 무한 루프가 발생할 수 있습니다. 특정 시작 파일이 실행되지 않으므로 이는 문제가 되지 않습니다.tcsh
$HOME/.login
$HOME/.cshrc
.bashrc
.bash_profile
.tcshrc
/bin/csh
/bin/tcsh
.login
/bin/tcsh -l
zsh
bash
대부분의 쉘은 실행 중인 쉘을 식별하기 위해 변수를 설정합니다( $BASH_VERSION
, $tcsh
, $ZSH_VERSION
). 즐겨 사용하는 셸을 호출하기 위해 시작 코드를 작성하는 경우 if
해당 셸을 아직 실행하지 않은 경우에만 실행되도록 이를 포함하세요. 다음의 코드를 사용하세요.Conso Box의 답변:
if [ "${ZSH_VERSION:-unset}" = "unset" ] ; then
export SHELL=/bin/zsh
exec /bin/zsh -l
fi
(체크하면 허용하는 것 "${ZSH_VERSION:-unset}"
이상으로 복잡성이 추가됩니다 . 이 옵션을 사용하면 정의되지 않은 변수에 대한 참조가 오류가 됩니다.)"$ZSH_VERSION"
set -o unset
답변4
여러 가지 시나리오를 생각해 볼 수 있습니다.
zsh
에는 없으며 OP는 명령 프롬프트에 입력/etc/shells
하지 않고 사용하려고 합니다 .zsh
가능한 해결책.a) 프로필 트릭을 사용하여 로그인 시 실행합니다. 이는 실제로 쉘을 변경하는 것과 마찬가지로 작동합니다.
b) 추가 할 수
zsh
있도록 관리자에게 추가를 요청하세요./etc/shells
chsh
c) 관리자에게 쉘 변경을 요청하십시오. 이는 진입 능력을 빼앗기 때문에 현명하지 않습니다. 쉘이 있는 경우 에만
ftp
사용 가능ftp
/etc/shells
사용자는 제한된 쉘(
rbash
아마도rsh
..profile
편집 가능한 경우PATH
편집을 통해 확장할 수 있습니다./bin
경로에 들어가면 내부bash
에서 시작하여 명령rsh/rbash
에 액세스하여chsh
셸을 변경할 수 있습니다. 많은 명령에는 제한된 쉘을 탈출하고chsh
.chsh
다른 이유로는 실제로 작동하지 않습니다. 가능성 1의 솔루션 a도 여기에 대한 답변입니다.
시나리오 2는 실제로 기본 셸을 변경하는 유일한 이유입니다(너무 제한적임).