zsh với Cygwin


35

Làm cách nào tôi có thể định cấu hình zsh làm trình bao mặc định trong Cygwin?

Câu trả lời:


45

Trừ khi bạn sử dụng cygwin như một môi trường nhiều người dùng (trong trường hợp đó sẽ sử dụng chshnhư bạn làm trong một môi trường tiêu chuẩn.)

Nếu không, bạn chỉ cần thay đổi cygwin.bat để chạy zsh -l -ithay vì bash --login -ivà nó sẽ chạy như một vỏ đăng nhập.  

Tất nhiên, nếu bạn muốn chạy nhiều shell từ khi khởi động, chỉ cần tạo một tập hợp các .battệp để tải các shell khác nhau. ( sh, ksh, csh, fishVv)

Cập nhật ...

Tôi cảm thấy tôi nên cập nhật điều này để cung cấp thông tin về việc thực hiện việc này mà không cần chshthực hiện ở phần cuối Unix. Chỉnh sửa /etc/passwdtập tin và thay thế lần xuất hiện của /bin/bashvới /bin/zsh. (Đây thực sự là những gì chshsẽ làm, nhưng theo cách này, bạn sẽ làm điều đó cho tất cả người dùng trong một lần.)


15
Theo mặc định, không còn / etc / passwd trong cygwin và chsh không còn được hỗ trợ. Câu trả lời này không có ích (ngày 10 tháng 4 năm 2014).
Jeff Snider

Về nhà @THESorcerer bạn say
ocodo

2
@JeffSnider chạy mkpasswd -l -p "$(cygpath -H)" > /etc/passwdvà chỉnh sửa /etc/passwdtệp vừa tạo
BrunoLM

17

Nếu tôi đọc đúng câu hỏi của bạn, bạn đang tìm kiếm cái gì khác so với những gì chère vật tư (trong đó, cấp, là khá mát mẻ theo đúng nghĩa của nó).

Phiên bản hiện tại của Cygwin không có tệp / etc / passwd và hệ thống tôi đang làm việc có thông tin tài khoản Windows trong cơ sở dữ liệu miền ngoài tầm kiểm soát của tôi. Do đó, chsh không còn được hỗ trợ.

Tôi cũng thấy rằng bash không được mã hóa cứng vào tập lệnh startxwin và cũng không được mã hóa cứng trong bất kỳ tệp .bat nào. Hóa ra bạn không cần phải nghịch ngợm với các tập tin .bat.

Tìm kiếm cách thay đổi vỏ của tôi, tôi tìm thấy một số lời khuyên về mkpasswd

Tôi đã thêm nó vào hỗn hợp.

Trang người đàn ông nói:

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.

(Tôi không biết tại sao khoảng cách lại "tắt" ...)

Sau đó tôi đã sử dụng lệnh sau:

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

Lần tới khi bạn mở Cygwin Terminal, nó sẽ chuyển thẳng đến zsh

Và đó, tôi nghĩ, là những gì bạn yêu cầu.


17

Tôi chỉ cần thêm binthư mục trong thư mục cygwin vào Biến môi trường đường dẫn Windows của mình và sau đó tạo một lối tắt đến:

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

hoặc chỉ thay đổi phím tắt menu bắt đầu mặc định của Cygwin thành giống nhau.


2
Tôi đã phải sử dụng /bin/zshthay vì zsh.
kraiz

1
the bin directory in the cygwin directory to my Windows Path Environment Variablehoạt động mà không có sự thay đổi này đối với tôi
ruslo

các ilà không cần thiết vì nó sẽ là một vỏ đăng nhập và không interactive.
Timo

7

Sao chép từ câu trả lời của tôi trên Stack Overflow :


Thay vì tạo tệp passwd, mà Cygwin khuyên dùng so với 1 , bạn có thể chỉnh sửa /etc/nsswitch.conf . Thêm hoặc chỉnh sửa dòng sau:

db_shell: / usr / bin / zsh

Mặt trái / lên của phương pháp này là, nếu bạn có nhiều người dùng, thay đổi này ảnh hưởng đến tất cả họ. Mặt lên / lên là nó chết đơn giản. Điều hấp dẫn duy nhất là bạn phải khởi động lại Cygwin.

Nếu bạn làm sử dụng mkpasswd sau sự thay đổi này, nó sẽ sử dụng vỏ mặc định mới của bạn cho tất cả người dùng được phép đăng nhập vào.


1 Tài liệu mkpasswd nói điều này:

Không sử dụng lệnh này để tạo tệp cục bộ / etc / passwd, trừ khi bạn thực sự cần nó. Xem Hướng dẫn sử dụng Cygwin để biết thêm thông tin.

Tôi thực sự không thể tìm thấy bất kỳ lý do chắc chắn nào trong hướng dẫn của người dùng , ngoài một đề cập rằng bạn sẽ phải tạo lại các tập tin / etc / passwd và / etc / group nếu người dùng và nhóm của bạn thay đổi, mà tôi cho là đủ lý do. Tôi có thể nói rằng quá trình này có phần dễ bị lỗi cho người mới.


Điều này nên được đánh dấu là chấp nhận.
Arda

4

Giả sử bạn quan tâm đến việc thay đổi shell được sử dụng trong mintty / Cygwin Terminal, trước tiên, nó sẽ kiểm tra biến môi trường SHELL, sau đó là tệp passwd (bây giờ không tồn tại), sau đó rơi trở lại / bin / sh, đó là những gì nó dường như đang làm theo mặc định

Tôi đã có thể đặt biến môi trường SHELL trong Windows thành /usr/bin/zshvà nó hoạt động mà không có bất kỳ thay đổi nào khác. Tôi chỉ thay đổi nó cho người dùng Windows của tôi, không phải trên toàn cầu.

Đặt biến môi trường có thể khác nhau đối với các phiên bản Windows khác nhau. Hãy thử tìm kiếm "môi trường" trong Bảng điều khiển Windows của bạn. Đối với tôi, trong Windows 7, đó là Bảng điều khiển → Hệ thống → Cài đặt hệ thống nâng cao, hiển thị hộp thoại / bảng điều khiển Thuộc tính hệ thống, sau đó là tab Nâng cao, sau đó là nút Biến môi trường, hiển thị hộp thoại Biến môi trường, sau đó tạo một biến người dùng mới được đặt tên SHELLvới giá trị /usr/bin/zsh. Sau đó OK trở lại với tất cả những điều đó và bắt đầu một mintty mới.


Bây giờ điều này nên được nâng cao mạnh mẽ! Cách đơn giản nhất không gây rối với âm mưu bên trong của Cygwin và dễ dàng đảo ngược!
pepoluan

1

Chỉ cần nghĩ rằng tôi sẽ thêm câu trả lời này trong trường hợp nó giúp bất cứ ai đang tìm kiếm nó. Nếu bạn sử dụng chere (có thêm tùy chọn "Bash prompt here" vào menu ngữ cảnh nhấp chuột phải của bất kỳ thư mục nào), bạn có thể đặt nó thành zsh ("Zsh Prompt Here") với:

chere -i -t mintty -s zsh

0

Nếu bạn muốn sử dụng trình bao Cygwin bên trong IDE Intellij, thì hãy sử dụng cài đặt sau bên trong cài đặt / công cụ / thiết bị đầu cuối

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

Điều này sẽ nhúng vỏ cygwin bên trong intellij thay vì sinh ra một cửa sổ mới

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.