Membuat ZSH default Shell di MacOSX [ditutup]

99

Saya menginstal zsh di Mac saya. dan sekarang saya ingin menjadikannya shell default, bukan Bash. Tapi sepertinya saya mengalami kesalahan berikut:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell
Harsha MV
sumber
1
Apa chsh -lkeluaran? (Jika tidak berhasil, apa isinya /etc/shells?) Apakah Anda yakin ini gagal dan bukan hanya peringatan? Apakah menambahkan di /usr/bin/zshsana membuat ini berhasil?
Etan Reisner
1
chsh: opsi memerlukan argumen - penggunaan l: chpass [-l lokasi] [-u authname] [-s shell] [user]
Harsha MV
/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV
Ada apa dengan /bin/zsh?
jxh
1
Sekarang ada cara resmi untuk mengubah shell default menjadi zsh. Lihat dokumen Apple "Gunakan zsh sebagai shell default di Mac Anda" support.apple.com/en-ca/HT208050
Anthonyeef

Jawaban:

86

3 langkah mudah:

  1. which zshini memberi Anda jalan menuju zsh
  2. Kemudian chsh -s /bin/zshatau ganti jalur ke zsh Anda jika berbeda
  3. Nyalakan ulang mesin Anda
Quentin Perez
sumber
yay itu berhasil. apakah itu spesifik Yosemite?
Harsha MV
2
Tidak, saya tidak berpikir, itu hanya untuk informasi Anda :)
Quentin Perez
8
Komentar lain yang relevan pada pertanyaan lama yang sama yang mengatakan menambahkan /usr/bin/zshuntuk /etc/shellsmemecahkan masalah.
Brice
Ini bekerja dengan sempurna
Olkunmustafa
1
Setel sesuai dengan / etc / shells! Cari jalur zsh dengan '$ nano / etc / shells'. Milik saya berada di / bin / zsh dan bukan / usr / bin / zsh pada 10.12.2
oikonomopo
189

Jawaban yang benar seharusnya mengatasi masalah Anda:

chsh: / usr / bin / zsh: shell non-standar

Alasannya adalah karena chshhanya akan menerima shell yang ditentukan dalam file / etc / shells, seperti yang Anda lihat dengan membaca manual untuk chsh:

chsh akan menerima nama path lengkap dari semua file yang dapat dieksekusi di sistem. Namun, itu akan mengeluarkan peringatan jika shell tidak terdaftar di file / etc / shells.

Untuk mengatasi masalah ini dan menjadikan zsh sebagai shell default, Anda harus:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

Jelas, saya berasumsi bahwa zshitu menghalangi Anda di sini. Solusi ini juga akan berfungsi jika Anda, misalnya, memilih untuk menginstal zshdengan brew install zsh.

EDIT (terima kasih untuk ThisIsFlorianK atas komentarnya) :

Bergantung pada pengaturan shell Anda, Anda mungkin mendapatkan pesan yang mengatakan /etc/shells: Permission denied. Anda dapat menemukan informasi tentang masalah ini di sini. Untuk mengatasinya, gunakan yang berikut ini:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)
dangom
sumber
4
ini lebih akurat daripada jawaban yang diterima menurut saya. dengan asumsi zsh diinstal di / usr / bin / zsh, jawaban lain tidak berfungsi. Mereka bekerja untuk OP karena secara default, Apple menginstal zsh di / bin / zsh. Namun, jika Anda ingin menggunakan homebrew's zsh (yang diinstal di bawah / usr / local / bin / zsh), ini akan menjadi cara yang tepat untuk melakukannya
verboze
Saya mendapat "bash: / etc / shells: Izin ditolak". Jawaban melalui System Preferences berhasil untuk saya.
Ricardo Stuven
44
Jika Anda mendapatkan /etc/shells: Permission denied==> Lakukan itu sebagai gantinya: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK
1
stackoverflow.com/a/44547726/99834 - bekerja tanpa mengotak-atik file sistem. Satu-satunya hal yang hilang adalah versi CLI untuk melakukan operasi yang sama.
sorin
@sorin Apakah ini suara negatif vandalisme serampangan atau apakah sebenarnya ada yang salah dengan jawabannya? File sistem adalah file teks yang dapat diedit karena suatu alasan. chshtersedia secara default karena suatu alasan. Meskipun tidak ada yang salah dengan mengklik melalui banyak menu untuk mencapai hal yang sama, itu tidak hanya tidak dapat dibawa dan rawan kesalahan, tetapi juga menyesatkan karena menyembunyikan dari pengguna tempat perubahan itu berasal.
dangom
52

Saya bisa membuatnya bekerja dengan melakukan hal berikut:

  1. Buka Preferensi Sistem
  2. Klik "Pengguna & Grup"
  3. Klik gembok untuk melakukan perubahan.
  4. Klik kanan pengguna saat ini -> Opsi lanjutan
  5. Ubah shell login ke / bin / zsh di menu dropdown.
  6. Buka terminal baru dan verifikasi dengan echo $SHELL
Nate Jenson
sumber
4
jika Anda menginstal zsh melalui homebrew, zsh akan ditempatkan di dalamnya /usr/local/bin/zsh. Oleh karena itu Anda perlu mengedit di /etc/shellsbawah sudo dan menambahkan entri /usr/local/bin/zshsebelum Anda dapat memilih executable zsh yang diinstal hombrew
Baldy
7

Di MacBook pekerjaan saya, saya harus melakukan ini:

sudo chsh -s /usr/local/bin/zsh my_user_name

Kemudian saya harus membuat .bash_profilefile untuk membuat terminal saya beralih ke z-shell setiap kali saya membukanya:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

Ide terakhir dipinjam dari sini .

sakovias
sumber