私は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
_の使用を中止するかを判断できません。両方をカバーします。
zsh
単にchsh
を実行し、以前使用していたシェルを選択します。以前に使用していたシェルがわからない場合は、ほぼ間違いなくbash
です。このコマンドは、ユーザーに関連付けられている「ログインシェル」を変更します。基本的に、デフォルトのシェルを変更します。
変更を有効にするには、新しいターミナルウィンドウを開く必要があります。これが機能しない場合は、ログアウトしてから再度ログインして、環境を再初期化する必要があります。
oh-my-zsh
_のみを無効にする~/.zshrc.pre-oh-my-zsh
_が存在するかどうかを確認します。おそらくそうです。 (このファイルは、_oh-my-zsh
_インストールスクリプトが以前の_.zshrc
_を邪魔にならないように移動したときに作成されます。_.zshrc
_はzsh
のスタートアップファイルで、_.bashrc
_ for bash
。)mv ~/.zshrc ~/.zshrc.oh-my-zsh
_を実行します。これにより、_oh-my-zsh
_で作成された_.zshrc
_が邪魔にならないようになり、_mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc
_を実行して元の状態に戻すことができます。~/.zshrc
_を開きます。 _source $ZSH/.oh-my-zsh
_という行を見つけて、コメント化するか削除します。これにより、_oh-my-zsh
_の初期化が無効になります。変更を有効にするには、シェルを再起動する必要があります。
新しいデフォルトのシェルを手動で設定するには、chsh -s/my/new/Shellを実行します(例:chsh -s/bin/bash)。次に、シェルを再び開きます。
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
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の一部の機能の動作を妨げているかどうかをテストする場合に役立ちます。