Cara mengganti shell default ke ZSH - chsh mengatakan “shell tidak valid”

36

Saya menginstal ZSH pada VM milik saya, tempat saya mengkompilasinya dari sumber. Lokasi ZSH adalah /usr/local/bin/zshketika saya menjalankan chsh -s /usr/local/bin/zshoutputnya chsh: /usr/local/bin/zsh is an invalid shell. Saya juga mencoba ini dengan sudo juga. Bagaimana saya bisa mengubahnya?

Zach Russell
sumber
mungkin duplikat Di mana saya mengganti shell saya?
Mikel
6
@Mikel, tidak, pertanyaan itu adalah "Saya tidak tahu tentang chsh" daripada " chshtidak bekerja untuk saya".
cjm

Jawaban:

48

Tambahkan zsh ke /etc/shells:

command -v zsh | sudo tee -a /etc/shells

Anda sekarang dapat menggunakan chsh untuk mengatur zsh sebagai shell:

sudo chsh -s "$(command -v zsh)" "${USER}"

Lihat dokumentasi ini: Mengubah shell login Anda

Biapy
sumber
8

Anda perlu menambahkan /usr/local/bin/zshuntuk /etc/shells.

Adam Lang
sumber
3

Pertama, periksa apakah zshterdaftar sebagai shell yang valid oleh

cat /etc/shells

Jika zshtidak terdaftar, instal. Misalnya, jika Anda menggunakanapt

sudo apt-get install zsh

Lakukan, langkah 1 lagi dan lihat jalannya zsh. Dalam kasus saya, keduanya /usr/bin/zshdan /usr/zshterdaftar. Seperti @ Stéphane Chazelas disebutkan dalam komentar, jika Anda ingin mengkompilasi dan menginstal shell dari awal, pastikan untuk menambahkan path /etc/shells.

Ganti shell menggunakan

chsh -s /usr/bin/zsh

Dari halaman manual :

-s, --shell SHELLNama shell login baru pengguna. Pengaturan bidang ini menjadi kosong menyebabkan sistem memilih shell login default.

Logout dan login lagi.

Sat Yam
sumber
Ya, jika Anda menginstal shell sebagai bagian dari paket OS, kemasan OS biasanya akan menambahkan shell ke /etc/shells. Intinya di sini adalah bahwa jika Anda mengkompilasi dan menginstal shell dengan tangan, Anda juga perlu menambahkan path/etc/shells diri Anda sendiri dengan tangan.
Stéphane Chazelas
Poin bagus. Saya memikirkan manajer paket seperti 'apt'. Saya telah mengedit jawaban untuk memasukkan poin Anda.
Sab Yam
Ini pada dasarnya adalah apa yang sudah dikatakan oleh dua jawaban lainnya.
Jeff Schaller