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


8

私はこのスレッドで次のスニペットを見ました:デフォルトのシェルとして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ログインに使用するデフォルトのバージョンとは異なるバージョンを呼び出したいという同様の状況があります。この問題が発生する理由の一部は、選択できないためですでzsh許可されているオプションのの希望するバージョンで、chsh管理者権限がありません。

これとともに:

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

回答:


6

bashの代わりにzshを実行する場合は/usr/local/bin/bashzsh実行可能ファイルへのパスに置き換えるだけです。このスニペットは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

ことを確認してくださいexec ~/bin/zsh -lあなたのを読み取るためのzshの新しいインスタンスをしたい場合~/.zprofile。その場合は、上記のスニペットが.profileまたはに.bash_profile含まれている必要があります。ログインシェルがzshの場合は、スニペットをに入れないでください。.zprofileそうしないと、zshの新しいインスタンスがexec再度それを呼び出さないようにしてください。


@Gillesに感謝します。私は.zprofile:に次のように書きました、if [[ $ZSH_VERSION != 4.3.14 ]]; then exec /n/sw/zsh-4.3.14/bin/zsh --login fiそしてそれはうまくいくようです!
Amelio Vazquez-Reina
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.