chshまたは管理者権限なしでデフォルトシェルを変更する

chshまたは管理者権限なしでデフォルトシェルを変更する

このスレッドで次のスニペットを見ました。cshからbashにデフォルトシェルを変更する方法

sleep 2
if (-x /usr/local/bin/bash) then
  exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash'
endif

私が知っているようにこのコードを入れると、~/.loginログイン時に呼び出されます。bash

zsh私も似たような状況にあり、私は似たようなコードスニペットを使って私がログインしたデフォルトバージョン以外のバージョンを呼び出したいと思います。私がこの問題を経験している理由の1つは、zsh許可されたオプションの中から目的のバージョンを選択できず、chsh管理者権限がないためです。

これで:

  • 異なるバージョンのzshを切り替えるときにこれを行うには、上記のコードスニペットをどのように変更できますか?
  • exec上記のコードスニペットに2つのコマンドが必要なのはなぜですか?彼らは何をしていますか?また、上記のコードスニペットが使用されるのはなぜですか?sh そして bash(ユーザーはログインを使用する必要がありますcsh

ベストアンサー1

bashの代わりにzshを実行するには、/usr/local/bin/bash実行可能ファイルのパスに置き換えますzsh。このコードスニペットはcsh専用です。ログインシェルが(t)cshではない場合、このコードは~/.login何もしません。

なぜこう書かれたのかは、書いた人に尋ねなければなりません。[その人が誰であるかを確認してください。 ]ああ。さて、これはexec /usr/local/bin/bashログインシェルを起動しないため、コマンドは.profile実行されません。ただし、これは実行を通じてより簡単な方法で解決できます/usr/local/bin/bash --login

ログインシェルがcshでない場合は、別のコードスニペットが必要ですexec。 zshを含むBourneスタイルのシェルから:

if [ -x ~/bin/zsh ]; then exec ~/bin/zsh; fi

zshのexec ~/bin/zsh -l新しいインスタンス~/.zprofile。 zshの新しいインスタンスは再度呼び出されません。.profile.bash_profile.zprofileexec

おすすめ記事