루트 액세스 없이 zsh 기본 쉘 만들기

루트 액세스 없이 zsh 기본 쉘 만들기

zsh학교 컴퓨터를 사용하고 있는데 대신 사용하고 싶습니다 bash. 이를 기본 쉘로 만들고 싶지만 $ chsh -s $(which zsh)관리자 권한이 없어서 명령을 실행할 수 없습니다.

.bashrc내 콘텐츠에 무언가를 넣는 방법이나 해결 방법으로 열 때 자동으로 호출되는 무언가가 있습니까 ?zsh

명확히 말하면 zsh이미 설치되어 있습니다.

답변1

.bash_profile홈 디렉터리에 다음 줄을 만들고 추가합니다.

export SHELL=/bin/zsh
exec /bin/zsh -l

업데이트: .profile기본 셸이 bash가 아닌 경우 일반 솔루션으로 사용할 수 있습니다. .profileZsh가 이것을 호출할 수 있는지 확실하지 않고 중복될 수도 있지만 간단한 확인만으로 안전하게 수행할 수 있습니다.

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_profileexec

  • 로그인 셸이 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 -lzshbash

대부분의 쉘은 실행 중인 쉘을 식별하기 위해 변수를 설정합니다( $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

여러 가지 시나리오를 생각해 볼 수 있습니다.

  1. zsh에는 없으며 OP는 명령 프롬프트에 입력 /etc/shells하지 않고 사용하려고 합니다 . zsh가능한 해결책.

    a) 프로필 트릭을 사용하여 로그인 시 실행합니다. 이는 실제로 쉘을 변경하는 것과 마찬가지로 작동합니다.

    b) 추가 할 수 zsh있도록 관리자에게 추가를 요청하세요./etc/shellschsh

    c) 관리자에게 쉘 변경을 요청하십시오. 이는 진입 능력을 빼앗기 때문에 현명하지 않습니다. 쉘이 있는 경우 에만 ftp사용 가능ftp/etc/shells

  2. 사용자는 제한된 쉘( rbash아마도 rsh.

    .profile편집 가능한 경우 PATH편집을 통해 확장할 수 있습니다. /bin경로에 들어가면 내부 bash에서 시작하여 명령 rsh/rbash에 액세스하여 chsh셸을 변경할 수 있습니다. 많은 명령에는 제한된 쉘을 탈출하고 chsh.

  3. chsh다른 이유로는 실제로 작동하지 않습니다. 가능성 1의 솔루션 a도 여기에 대한 답변입니다.

시나리오 2는 실제로 기본 셸을 변경하는 유일한 이유입니다(너무 제한적임).

관련 정보