このスレッドで次のスニペットを見ました。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
.zprofile
exec