Lihat di sini untuk penjelasan yang sangat baik dan solusi yang diposting oleh @ mklement0 [sehubungan dengan bashmasalah pemutakhiran.
Saya memiliki masalah yang sama dalam melakukan hal yang sebaliknya pada sistem saya (OS X 10.10.1): membuat bashshell login default lagi setelah saya menginstal oh-my-zsh, yang membuat zshdefault, dan kemudian memutakhirkan bashdari 3.2.53 ke 4.3.30 menggunakan Homebrew ( mengapa Apple mengirim Yosemite dengan bashversi lama ?).
Saya pikir SHELLvariabel lingkungan mencerminkan tetapi tidak mengontrol shell login default aktual untuk pengguna. Misalnya, jika, katakanlah, bashadalah default Anda dan Anda membuka bashjendela shell baru dari terminal maka $ export SHELL="/bin/zsh"; echo "$SHELL"akan muncul /bin/zshtetapi tidak ada perubahan yang sebenarnya akan terjadi karena jika Anda membuka jendela shell baru dari terminal dan lakukan $ echo $0maka Anda akan melihat -bash( $0berisi nama dan path dari perintah yang memulai jendela shell, dalam hal ini bash, dan di -sebelahnya menunjukkan bahwa itu adalah shell login).
Seperti @ mklement0 menunjukkan shell login default aktual untuk pengguna dikendalikan oleh UserShellproperti dalam catatan pengguna dalam database internal sistem - ini dapat di-query dan dimutakhirkan menggunakan utilitas baris perintah dscl. Informasi ini akan diteruskan ke aplikasi terminal Anda ketika Anda membuka jendela shell.
Apa yang chsh -s /bin/zshdilakukan adalah mengubah UserShellproperti ini untuk mengaturnya zsh- Anda dapat memeriksanya dengan dscl . -read /Users/$USER/ UserShellsegera setelahnya, dan Anda akan melihatnya UserShell: /bin/zsh. Tetapi perubahan tidak berpengaruh pada jendela saat ini, sampai Anda melakukan sesuatu seperti yang exec su - $USERdisarankan oleh @ mklement0, atau sampai Anda menutup dan membuka jendela shell.
/etc/shells? Manual menyatakan bahwa jika shell yang Anda tentukan tidak ada dalam file itu, itu tidak dianggap sebagai shell standar.