私はこのスレッドで次のスニペットを見ました: デフォルトのシェルとして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
の希望するバージョンを選択できず、管理者権限がないためです。
これとともに:
exec
コマンドが必要なのはなぜですか?彼らは何をしますか?また、上記のスニペットがsh
とbash
を使用するのはなぜですか(ユーザーはcsh
でログインする必要があります)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
にしてください。その場合は、上記のスニペットが.profile
または.bash_profile
に含まれている必要があります。ログインシェルがzshの場合、.zprofile
にスニペットを入れないでください。または、zshの新しいインスタンスがexec
を再び呼び出さないようにしてください。