web-dev-qa-db-ja.com

アンインストールせずにoh-my-zsh(およびzsh)を「無効化」するにはどうすればよいですか?

私はzshとoh-my-zshを含む新しい開発環境を試していました。 oh-my-zshをインストールしたので、端末(iTerm2と端末)のデフォルトでは常にzshから始まり、oh-my-zshからの設定で起動します。 oh-my-zshをアンインストールしなくても、zshとその設定をoh-my-zshで「無効化」または停止できるかどうか疑問に思いました。それらをオンに戻す方法も知っておくとよいでしょう。

現在、私の端末は自動的にzshに入り(私はそう思います)、oh-my-zshを自動的に使用します。 zshが使用されている場合と、oh-my-zsh機能が使用されている場合の両方を制御できるようにしたいと思います。

私が知りたいことの1つは、ターミナルアプリケーションが起動時に実行するシェルをどのようにして知るかです。それも制御できるといいですね!

あなたが私に与えるすべてのコマンドの「なぜ」について可能な限り説明すると、それは役に立ちます! :)


私はOS Xを使用しています。それが問題かどうかはわかりませんが、自分よりもより一般的なUnix環境に当てはまる回答のほうが好きです。

19
Charlie Parker

質問の文言が曖昧であるため、zshの使用を中止するか、_oh-my-zsh_の使用を中止するかを判断できません。両方をカバーします。

無効にするzsh

単にchshを実行し、以前使用していたシェルを選択します。以前に使用していたシェルがわからない場合は、ほぼ間違いなくbashです。このコマンドは、ユーザーに関連付けられている「ログインシェル」を変更します。基本的に、デフォルトのシェルを変更します。

変更を有効にするには、新しいターミナルウィンドウを開く必要があります。これが機能しない場合は、ログアウトしてから再度ログインして、環境を再初期化する必要があります。

_oh-my-zsh_のみを無効にする

  1. _~/.zshrc.pre-oh-my-zsh_が存在するかどうかを確認します。おそらくそうです。 (このファイルは、_oh-my-zsh_インストールスクリプトが以前の_.zshrc_を邪魔にならないように移動したときに作成されます。_.zshrc_はzshのスタートアップファイルで、_.bashrc_ for 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_の初期化が無効になります。

変更を有効にするには、シェルを再起動する必要があります。

20
strugee

chsh -s/bin/bash

新しいデフォルトのシェルを手動で設定するには、chsh -s/my/new/Shellを実行します(例:chsh -s/bin/bash)。次に、シェルを再び開きます。

7
Honghui Li

ZSH設定の切り替え

異なるzsh構成フレームワーク(oh-my-zsh、zpreztoなど)をテストする場合は、andそれらを切り替えます。最善の策は、~/.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

このスクリプトはかなり単純で、私のすべてのシンボリックリンクが同じパターンで構成されているという事実に依存しています。 removeおよびcreate行をシンボリックリンクのループの後にコピーして貼り付けることができますパターンに従っていないこと。

完了したら、~/bin/use-zprezto--または~/bin/use-whatever--を使用してzshフレームワークを切り替えます。

変更は既存のシェルではなく、新しいzshシェルでのみ有効になることに注意してください。

シェル切り替え

少し危険ですが、意欲がある場合は、Shellコマンドにシンボリックリンクを使用して、シンボリックリンクをデフォルトのシェルとして設定できます。次に、上記の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
4
Justin C

Zshを開始する前に環境変数 ZDOTDIR を設定することにより、zshにユーザーごとの設定ファイルを別のディレクトリからロードするように指示できます。

設定ファイルを読み込まずにzshを起動したい場合は、ZDOTDIRを存在しないディレクトリに設定します。システム構成ファイル(/etc/zshenvを除く)をスキップする場合は、zsh -fを実行できます。システム構成ファイルをスキップしてユーザーごとのファイルを実行する場合は、zsh -dを実行します。

たとえば、デフォルトにせずにoh-my-zshをテストドライブする場合は、oh-my-zshの.zshrcをホームディレクトリに配置しないでください。代わりに、別の場所に置きます。 ~/.oh-my-zshで、oh-my-zshを使用する場合はZDOTDIR=~/.oh-my-zsh zshを実行します。


ターミナルアプリケーションは、Shell環境変数で示されるシェルを実行します。この変数が設定されていない場合、ユーザーデータベース(/etc/passwd)に示されているログインシェルを実行します。ターミナルエミュレータを起動すると、別のアプリケーションをリクエストできます。 xterm -e fish

@Gillesに少し隠されているので、設定なしでzshをロードする簡単な方法に答えてください。 .zshrc .zshenvなど

zsh -f

これは、設定内の何かがzshの一部の機能の動作を妨げているかどうかをテストする場合に役立ちます。

0
zzapper