zsh dengan Cygwin

35

Bagaimana saya bisa mengkonfigurasi zsh menjadi shell default di bawah Cygwin?

simao
sumber

Jawaban:

45

Kecuali Anda menggunakan cygwin sebagai lingkungan multi-pengguna (dalam hal ini gunakan chshseperti yang Anda lakukan pada lingkungan standar.)

Jika tidak, Anda hanya mengubah cygwin.bat untuk menjalankan zsh -l -ibukannya bash --login -idan itu akan berjalan sebagai shell login.  

Tentu saja, jika Anda ingin menjalankan beberapa shell dari startup, cukup buat satu set .batfile untuk memuat shell yang berbeda. ( sh, ksh, csh, fishDll)

Memperbarui...

Saya merasa saya harus memperbarui ini untuk memberikan info tentang melakukan ini tanpa chshtetapi masih melakukannya di ujung Unix. Edit /etc/passwdfile dan ganti kejadian /bin/bashdengan /bin/zsh. (Ini secara efektif apa yang chshakan dilakukan, tetapi dengan cara ini Anda akan melakukannya untuk semua pengguna sekaligus).

ocodo
sumber
15
Tidak ada lagi / etc / passwd di cygwin secara default, dan chsh tidak lagi didukung. Jawaban ini tidak membantu (10 April 2014).
Jeff Snider
Pulanglah ke rumah, toko penjual minuman keras
ocodo
2
@JeffSnider run mkpasswd -l -p "$(cygpath -H)" > /etc/passwddan mengedit yang baru membuat /etc/passwdberkas
BrunoLM
17

Jika saya membaca pertanyaan Anda dengan benar, Anda sedang mencari sesuatu yang lain dari pada apa persediaan chere (yang, memang, cukup keren dalam dirinya sendiri).

Versi Cygwin saat ini tidak memiliki file / etc / passwd , dan sistem yang sedang saya kerjakan memiliki informasi akun Windows dalam database domain di luar kendali saya. Akibatnya, chsh tidak lagi didukung.

Saya juga menemukan bahwa bash bukan hard-coded ke dalam skrip startxwin , juga bukan hard-coded pada file .bat. Ternyata Anda tidak perlu mengutak-atik file .bat sama sekali.

Mencari cara mengganti shell saya, saya menemukan beberapa saran tentang mkpasswd

Saya menambahkannya ke dalam campuran.

Halaman manual mengatakan:

SYNOPSIS
   mkpasswd [OPTIONS]...

OPTIONS
   Don't use this command to generate a local /etc/passwd file, unless you
   really need one.  See the Cygwin User's Guide for more information.

   -c,--current
          Print current user.

  DESCRIPTION
        The   mkpasswd  program can be used to create a        /etc/passwd
   file.  Cygwin doesn't need  this  file,        because  it  reads  user
   information  from  the Windows account databases,       but you can add
   an  /etc/passwd file, for instance       if your machine is often  dis‐
   connected from its domain controller.

        Note  that this information is static, in contrast to the informa‐
   tion       automatically gathered by Cygwin from  the  Windows  account
   databases.  If        you  change  the user information on your system,
   you'll need to regenerate       the passwd file for it to have the  new
   information.


        For  very  simple needs, an entry for the current user can be cre
   ated       by using the option  -c.

(Saya tidak tahu mengapa jaraknya sangat "tidak aktif" ...)

Saya kemudian menggunakan perintah berikut:

mkpasswd -c | sed -e 'sX / bashX / zshX' | tee -a / etc / passwd

Lain kali Anda membuka Terminal Cygwin, itu akan langsung menuju zsh

Dan itu, saya pikir, adalah apa yang Anda minta.

David L. Paktor
sumber
17

Saya hanya menambahkan bindirektori di direktori cygwin ke Windows Path Environment Variable saya dan kemudian membuat pintasan ke:

mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login

atau ubah saja pintasan menu awal cygwin menjadi sama.

Justin Buser
sumber
2
Saya harus menggunakan /bin/zshbukan zsh.
kraiz
1
the bin directory in the cygwin directory to my Windows Path Environment Variablebekerja tanpa perubahan ini untuk saya
ruslo
yang itidak diperlukan karena akan menjadi shell login dan tidak interactive.
Timo
7

Disalin dari jawaban saya di Stack Overflow :


Alih-alih membuat file passwd, yang direkomendasikan Cygwin terhadap 1 , Anda bisa mengedit /etc/nsswitch.conf . Tambahkan atau edit baris berikut:

db_shell: / usr / bin / zsh

Sisi bawah / atas dari metode ini adalah bahwa, jika Anda memiliki banyak pengguna, perubahan ini mempengaruhi semuanya. Sisi atas / atas adalah bahwa itu sangat sederhana. Satu-satunya tangkapan adalah Anda harus memulai ulang Cygwin.

Jika Anda melakukan penggunaan mkpasswd setelah perubahan ini, ia akan menggunakan shell default baru Anda untuk semua pengguna yang diizinkan untuk log on.


1 Dokumentasi mkpasswd mengatakan ini:

Jangan gunakan perintah ini untuk menghasilkan file lokal / etc / passwd, kecuali jika Anda benar-benar membutuhkannya. Lihat Panduan Pengguna Cygwin untuk informasi lebih lanjut.

Saya tidak dapat menemukan alasan yang kuat dalam panduan pengguna , selain dari penyebutan bahwa Anda harus membuat ulang file / etc / passwd dan / etc / group jika pengguna dan grup Anda berubah, yang menurut saya cukup baik alasan. Saya dapat mengatakan bahwa prosesnya agak rawan kesalahan untuk pemula.

P Ayah
sumber
Ini harus ditandai sebagai diterima.
Arda
4

Dengan anggapan Anda tertarik untuk mengganti shell yang digunakan dalam mintty / Cygwin Terminal, pertama-tama memeriksa variabel lingkungan SHELL, kemudian file passwd (sekarang tidak ada), kemudian jatuh kembali ke / bin / sh, yang sepertinya dilakukan. secara default.

Saya bisa mengatur variabel lingkungan SHELL pada Windows untuk /usr/bin/zshdan bekerja tanpa perubahan lain. Saya baru saja mengubahnya untuk pengguna Windows saya, bukan secara global.

Mengatur variabel lingkungan mungkin bervariasi untuk berbagai versi Windows. Coba cari "lingkungan" di Panel Kontrol Windows Anda. Bagi saya, di bawah Windows 7, itu adalah Control Panel → System → Advanced System Settings, yang memunculkan panel / dialog kontrol System Properties, lalu tab Advanced, kemudian tombol Environment Variables, yang memunculkan dialog Environment Variables, kemudian buat variabel pengguna baru dinamai SHELLdengan nilai /usr/bin/zsh. Lalu OK kembali dari semua itu dan mulai mintty baru.

wfaulk
sumber
Sekarang ini harus dibalik sebanyak-banyaknya! Cara paling sederhana yang tidak mengacaukan intrik internal Cygwin, dan mudah dibalik!
pepoluan
1

Saya pikir saya akan menambahkan jawaban ini jika itu membantu siapa saja yang mencarinya. Jika Anda menggunakan chere (yang menambahkan opsi "Bash prompt di sini" ke menu konteks klik kanan folder mana pun), Anda dapat mengaturnya ke zsh ("Zsh Prompt Here") dengan:

chere -i -t mintty -s zsh
Mike HR
sumber
0

Jika Anda ingin menggunakan shell Cygwin di dalam IDE Intellij, kemudian gunakan pengaturan berikut di dalam pengaturan / alat / terminal

c:\cygwin\bin\zsh.exe -l -i

Ini akan menanamkan shell cygwin di dalam intellij alih-alih menelurkan jendela baru

serup
sumber