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


16

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環境により当てはまる傾向があります。


使用を停止しzshますか?またはoh-my-zsh?どれ?
虐待14年

どちらかと両方。つまり私はzshのとOH-MY-zshのを使用していたときに、両方を制御できるようにしたい
チャーリー・パーカー

回答:


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-created .zshrcが邪魔にならないので、を実行することで元の状態に戻すことができmv ~/.zshrc.pre-oh-my-zsh ~/.zshrcます。
  3. 存在しない場合~/.zshrcは、テキストエディターで開きます。言う行を見つけてsource $ZSH/.oh-my-zshコメントアウトするか、削除します。これにより、の初期化が無効になりますoh-my-zsh

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


私の言葉遣いについて謝罪します。私はそれを明確にしたと信じています。今は明らかですか?どうもありがとう。
チャーリーパーカー14年

@CharlieParkerええ、私は怠けていました。答えを拡大し、「理由」を少し説明します。
虐待14年

1
気づかなかった場合に備えて、@ CharlieParkerがこの回答を更新しました。何か改善できるものがあれば教えてください。
14

4

ZSH構成切り替え

別のzshの設定フレームワーク(OH-MY-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シェルでのみ有効であることに注意してください。

シェルスイッチング

少し危険ですが、もしあなたがそんなに傾いているなら、シェルコマンドにシンボリックリンクを使用して、デフォルトのシェルとしてシンボリックリンクを設定できます。その後、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-zshZDOTDIR=~/.oh-my-zsh zshoh-my-zshを使用するときに実行します。


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


0

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

zsh -f

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.