oh-my-zsh (및 zsh)를 제거하지 않고 어떻게“비활성화”합니까?


16

zsh 및 oh-my-zsh를 포함한 새로운 개발 환경을 시도했습니다. 이제 oh-my-zsh를 설치 했으므로 기본적으로 터미널 (iTerm2 및 터미널)에서 항상 zsh로 시작하고 oh-my-zsh의 설정으로 시작합니다. oh-my-zsh를 제거하지 않고 oh-my-zsh와 함께 zsh 및 해당 설정 사용을 "비활성화"하거나 중지 할 수 있는지 궁금합니다. 다시 켜는 방법을 아는 것도 좋습니다.

현재 내 터미널은 자동으로 zsh에 들어가고 oh-my-zsh를 자동으로 사용합니다. zsh를 사용할 때와 oh-my-zsh 기능을 사용할 때 더 많은 것을 제어하고 싶습니다.

내가 알고 싶은 한 가지는 터미널 응용 프로그램이 시작할 때 어떤 쉘을 시작할지 어떻게 알 수 있는지입니다. 그것은 또한 제어 할 수있어서 좋을 것입니다!

당신이 나에게주는 모든 명령의 "왜"에 대해 최대한 많이 설명한다면, 그것은 유용 할 것입니다! :)


나는 OS X를 사용하고 있습니다. 그것이 중요한지는 확실하지 않지만, 더 일반적인 Unix 환경에 더 적합한 답변을 더 선호합니다.


사용을 중지하고 싶 zsh습니까? 또는 oh-my-zsh? 어느?
strugee

둘 다. 즉, zsh와 oh-my-zsh를 사용할 때 둘 다 제어 할 수 있기를 원합니다
Charlie Parker

답변:


19

당신은 당신이 사용을 중단 할 뜻 경우 내가 말할 수 있도록 질문의 표현은 모호 zsh하거나 사용을 중지 할 oh-my-zsh. 나는 둘 다 다룰 것이다.

비활성화 zsh

chsh이전에 사용했던 쉘을 간단히 실행 하고 선택하십시오. 이전에 어떤 쉘을 사용했는지 모른다면 거의 확실 bash합니다. 이 명령은 사용자와 연관된 "로그인 쉘"을 변경합니다. 기본적으로 기본 쉘이 변경됩니다.

변경 사항을 적용하려면 새 터미널 창을 열어야합니다. 그래도 문제가 해결되지 않으면 로그 아웃했다가 다시 로그인하여 환경을 다시 초기화해야합니다.

사용 중지 oh-my-zsh

  1. ~/.zshrc.pre-oh-my-zsh존재 하는지 확인하십시오 . 아마 그렇습니다. 합니다 (시이 파일이 생성 된 것입니다 oh-my-zsh설치 스크립트는 이전의 이동 .zshrc방식의 아웃. .zshrc의 시작 파일 zsh과 유사 .bashrc위해 bash.)
  2. 그렇다면 mv ~/.zshrc ~/.zshrc.oh-my-zsh. 이렇게하면 oh-my-zsh생성 된 파일을 .zshrc벗어날 수 있으므로를 수행하여 원본을 복원 할 수 있습니다 mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc.
  3. 존재하지 않으면 ~/.zshrc텍스트 편집기에서여십시오. 표시된 줄을 찾아서 source $ZSH/.oh-my-zsh주석 처리하거나 제거하십시오. 의 초기화가 비활성화됩니다 oh-my-zsh.

변경 사항을 적용하려면 셸을 다시 시작해야합니다.


내 말에 대해 사과드립니다. 나는 그것을 명확히했다고 생각합니다. 지금은 분명합니까? 고마워요 btw.
Charlie Parker

@CharlieParker 네, 게으르고있었습니다. 나는 대답을 확장하고 아마도 "왜"에 대해 설명 할 것이다.
strugee

1
@CharlieParker 당신이 알지 못하는 경우이 답변을 업데이트했습니다. 개선이 가능한지 알려주세요.
strugee

4

ZSH 구성 전환

당신이 다른 zsh을 구성 프레임 워크 (오 - 내 - zsh을, zprezto 등) 테스트하려는 경우 그들 사이의 스위치를, 가장 좋은 건에 대한 심볼릭 링크 사용 ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofile,와 ~/.zshenv. 빠른 전환을 위해 해당 심볼릭 링크를 만들기 위해 각 프레임 워크에 대해 셸 스크립트를 만들 수 있습니다.

프레임 워크 구성을 자체 폴더에 넣으십시오. 각 프레임 워크마다.

  • 가능하면 자체 폴더에 프레임 워크를 설치하십시오.
  • 프레임 워크가 설치를 강제로 수행 ~/.zsh하면
    • ~/.zsh먼저 전류를 보호하십시오 . 어느 한 쪽
      • ~/.zsh심볼릭 링크를 제거하십시오 . rm ~/.zsh또는
      • ~/.zsh폴더를 이동하십시오 .mv ~/.zsh ~/.zsh.backup
    • 프레임 워크 설치 프로그램을 실행하십시오.
    • 프레임 워크 폴더를 자체 디렉토리로 이동하십시오. 예 mv ~/.zsh ~/.oh-my-zsh.
  • 각 프레임 워크에 대해 반복하십시오.

완료되면 각 프레임 워크에 대한 쉘 스크립트를 작성하여 필요한 심볼릭 링크를 작성하십시오. zprezto의 예는 이미 사용하고 있기 때문입니다.

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zprezto
#!/bin/bash
SYMLINKS=".zsh .zshrc .zshlogin .zshlogout .zshprofile .zpreztorc .zshenv .zshrc"
CONFIG_HOME="$HOME/.zprezto"

# check for unexpected error conditions
for sym in $SYMLINKS; do
   # report an error and quit if $sym exists and is not a symlink
   [[ -e "$HOME/$sym" -a ! -h "$HOME/$sym" ]] && { echo "error:  '$HOME/$sym' is not a symlink!"; return 1; }
done

# now create the symlinks now that nothing should go wrong
for sym in $SYMLINKS; do
   # remove old symlink if it exists
   [[ -h "$HOME/$sym" ]] && rm -f "$HOME/$sym"
   # create new symlink
   ln -s "$CONFIG_HOME/$sym" "$HOME/$sym"
done

# uncomment next line to start a new zsh shell.  CAUTION: each call is a zsh shell inside a zsh shell.  Too many calls will put you in limbo :D
#/usr/bin/env zsh
EOF

$ chmod 700 ~/bin/use-zprezto

이 스크립트는 상당히 단순하며 모든 심볼릭 링크가 동일한 패턴으로 구성되어 있다는 사실에 의존합니다. 당신은 복사 및 붙여 넣기 할 수 있습니다 제거를 하고 만들 당신이 패턴을 따르지 않는이 심볼릭 링크에 대한 루프 후 라인.

완료되면 ~/bin/use-zprezto-또는 ~/bin/use-whatever-를 사용 하여 zsh 프레임 워크 간을 전환하십시오.

변경 사항은 기존 쉘이 아닌 새 zsh 쉘에서만 적용됩니다.

쉘 스위칭

약간 위험하지만 너무 기울어지면 쉘 명령에 symlink를 사용하고 symlink를 기본 쉘로 설정할 수 있습니다. 그런 다음 use-*위 의 스크립트 방법에 따라 기본 셸을 변경할 수 있습니다.

zsh를 예로 들어 보면 ...

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zsh
#!/bin/bash
# check for valid shell symlink
if [[ ! -h "$HOME/.shell" ]]; then
  echo "error: $HOME/.shell is not a symlink!"
  return 1
fi

# remove existing shell symlink if it exists
[[ -h "$HOME/.shell" ]] && rm -f "$HOME/.shell"

# create new shell symlink, but warn user if this fails!
if ! ln -s /usr/bin/zsh "$HOME/.shell"; then
  echo "ERROR: failed to create $HOME/.shell symlink.  Manually create the symlink or future logins will fail!."
  return 2
fi
EOF

$ chmod 700 ~/bin/use-zsh

이것이 위험한 이유는 저장된 쉘 /etc/passwd이 유효한 프로그램이 아닌 경우 사용자로 로그인 할 수 없기 때문 입니다. 조심하지 않으면 계정에서 자신을 잠글 수 있습니다. 즉, ~/.shell심볼릭 링크가 끊어 졌거나 대화 형 프로그램을 가리 키지 않습니다. 사용자 계정으로 시도해 볼 수 있지만 계정에 권장되지는 않습니다 root.

여전히 계속하고 싶다면

$ ~/bin/use-zsh         # ensures ~/.shell exists for chsh
$ echo "$HOME/.shell | sudo tee -a /etc/shells    # add symlink to system's list of valid shells
$ chsh -s ~/.shell      # changes default shell in /etc/passwd for $USER

3

chsh -s / bin / bash

새로운 기본 쉘을 수동으로 설정하려면 chsh -s / my / new / shell을 수행하십시오 (예 : chsh -s / bin / bash). 그런 다음 간단히 껍질을 다시여십시오.


2

zsh를 ZDOTDIR시작하기 전에 환경 변수 를 설정하여 zsh 가 다른 디렉토리에서 사용자 별 구성 파일을로드하도록 지시 할 수 있습니다 .

구성 파일을로드하지 않고 zsh를 시작 ZDOTDIR하려면 존재하지 않는 디렉토리로 설정하십시오. 시스템 구성 파일 (을 제외하고 /etc/zshenv) 을 건너 뛰려면을 실행할 수 있습니다 zsh -f. 시스템 구성 파일을 건너 뛰고 사용자 별 파일을 실행하려면을 실행하십시오 zsh -d.

예를 들어, 기본값을 지정하지 않고 oh-my-zsh를 테스트 구동하려면 .zshrcfrom-oh-my-zsh를 홈 디렉토리에 두지 마십시오 . 대신, 예를 들어 다른 곳에 두십시오. 에서 ~/.oh-my-zsh다음 실행 ZDOTDIR=~/.oh-my-zsh zsh하면 오 - 내 - zsh을 사용하려는 경우.


터미널 응용 프로그램은 SHELL환경 변수로 표시된 셸을 실행합니다 . 이 변수가 설정되어 있지 않으면 사용자 데이터베이스 ( /etc/passwd)에 표시된 로그인 쉘을 실행합니다 . 터미널 에뮬레이터를 시작할 때 다른 애플리케이션을 요청할 수 있습니다 (예 :) xterm -e fish.


0

@Gilles에 약간 숨겨져 있으므로 .zshrc .zshenv 등의 구성없이 zsh를로드하는 빠른 방법에 대답하십시오.

zsh -f

이는 구성의 어떤 것이 zsh의 일부 기능이 작동하지 못하게하는지 테스트하려는 경우에 유용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.