zsh กับ Cygwin


คำตอบ:


45

นอกเสียจากว่าคุณกำลังใช้ cygwin เป็นสภาพแวดล้อมที่มีผู้ใช้หลายคน (ในกรณีนี้ให้ใช้chshตามที่คุณต้องการภายใต้สภาพแวดล้อมมาตรฐาน)

มิฉะนั้นคุณเพียงแค่เปลี่ยน cygwin.bat เพื่อให้ทำงานzsh -l -iแทนbash --login -iและมันจะทำงานเป็นเชลล์ล็อกอิน  

แน่นอนถ้าคุณต้องการเรียกใช้เชลล์จำนวนมากตั้งแต่เริ่มต้นเพียงสร้างชุดของ.batไฟล์เพื่อโหลดเชลล์ที่แตกต่างกัน ( sh, ksh, csh, fishฯลฯ )

อัปเดต ...

ฉันรู้สึกว่าฉันควรอัปเดตสิ่งนี้เพื่อให้ข้อมูลเกี่ยวกับการทำสิ่งนี้โดยไม่ต้องchshทำ แต่ยังทำอยู่ในตอนท้ายของ Unix แก้ไข/etc/passwdไฟล์และแทนที่การเกิดขึ้นของด้วย/bin/bash /bin/zsh(นี่คือสิ่งที่chshจะทำอย่างมีประสิทธิภาพแต่วิธีนี้คุณจะทำเพื่อผู้ใช้ทั้งหมดในครั้งเดียว)


15
ไม่มี / etc / passwd ใน cygwin อีกต่อไปโดยค่าเริ่มต้นและ chsh ไม่ได้รับการสนับสนุนอีกต่อไป คำตอบนี้ไม่ได้ช่วย (10 เมษายน 2014)
Jeff Snider

กลับบ้าน @THESorcerer คุณเมาแล้ว
ocodo

2
@JeffSnider วิ่งmkpasswd -l -p "$(cygpath -H)" > /etc/passwdและแก้ไขใหม่สร้าง/etc/passwdไฟล์
BrunoLM

17

ถ้าฉันอ่านคำถามของคุณถูกต้องคุณกำลังมองหาอย่างอื่นที่นอกเหนือไปจากสิ่งที่มี อยู่ (ซึ่งได้รับแล้วค่อนข้างเท่ห์ในตัวของมันเอง)

Cygwin รุ่นปัจจุบันไม่มี ไฟล์/ etc / passwdและระบบที่ฉันใช้งานอยู่มีข้อมูลบัญชี Windows ในฐานข้อมูลโดเมนที่อยู่นอกเหนือการควบคุมของฉัน ดังนั้นจึง ไม่รองรับchshอีกต่อไป

ฉันยังพบว่าการทุบตีนั้นไม่ได้เขียนโค้ดลงใน สคริปต์startxwinอย่างหนักและไม่ได้เข้ารหัสไว้ อย่างหนักในไฟล์. bat ใด ๆ ปรากฎว่าคุณไม่จำเป็นต้องเล่นกับไฟล์. bat เลย

ค้นหาวิธีเปลี่ยนเชลล์ฉันพบคำแนะนำเกี่ยวกับ mkpasswd

ฉันเพิ่มลงในการผสม

หน้าคนพูด:

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.

(ฉันไม่รู้ว่าทำไมการเว้นวรรคจึง "ปิด" ... )

ฉันใช้คำสั่งต่อไปนี้:

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

ในครั้งต่อไปที่คุณเปิด Cygwin Terminal มันจะตรงไปที่ zsh

และฉันคิดว่าเป็นสิ่งที่คุณต้องการ


17

ฉันเพิ่งเพิ่มbinไดเรกทอรีในไดเรกทอรี cygwin ไปยัง Windows Path Environment Variable แล้วสร้างทางลัดไปที่:

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

หรือเพียงแค่เปลี่ยนทางลัดเมนูเริ่ม cygwin เริ่มต้นเป็นแบบเดียวกัน


2
ผมใช้แทน/bin/zsh zsh
kraiz

1
the bin directory in the cygwin directory to my Windows Path Environment Variableทำงานโดยไม่มีการเปลี่ยนแปลงนี้สำหรับฉัน
ruslo

ไม่จำเป็นเพราะมันจะเป็นเปลือกเข้าสู่ระบบและไม่ได้i interactive
Timo

6

คัดลอกมาจากคำตอบของฉันใน Stack Overflow :


แทนการสร้างไฟล์ passwd ซึ่ง Cygwin แนะนำกับ1คุณสามารถแก้ไข /etc/nsswitch.conf เพิ่มหรือแก้ไขบรรทัดต่อไปนี้:

db_shell: / usr / bin / zsh

ด้านล่าง / ขึ้นของวิธีนี้คือถ้าคุณมีผู้ใช้หลายคนการเปลี่ยนแปลงนี้จะมีผลกับพวกเขาทั้งหมด ด้านขึ้น / ลงก็คือว่ามันตายง่าย สิ่งเดียวที่จับได้คือคุณต้องรีสตาร์ท Cygwin

ถ้าคุณทำใช้ mkpasswd หลังการเปลี่ยนแปลงนี้ก็จะใช้เปลือกเริ่มต้นใหม่ของคุณสำหรับผู้ใช้ทั้งหมดที่ได้รับอนุญาตให้เข้าสู่ระบบ


1เอกสาร mkpasswd พูดถึงสิ่งนี้:

อย่าใช้คำสั่งนี้เพื่อสร้างไฟล์ / etc / passwd ในระบบเว้นแต่คุณจะต้องการมัน ดูคู่มือผู้ใช้ Cygwin สำหรับข้อมูลเพิ่มเติม

ฉันไม่พบเหตุผลที่เป็นของแข็งในคู่มือผู้ใช้นอกเหนือจากการกล่าวถึงว่าคุณจะต้องสร้างไฟล์ / etc / passwd และ / etc / group ใหม่หากผู้ใช้และกลุ่มของคุณเปลี่ยนไปซึ่งฉันคิดว่ามันดีพอสมควร เหตุผล. ฉันสามารถพูดได้ว่ากระบวนการค่อนข้างผิดพลาดสำหรับมือใหม่


ควรทำเครื่องหมายว่ายอมรับแล้ว
Arda

4

สมมติว่าคุณสนใจเปลี่ยนเชลล์ที่ใช้ใน mintty / Cygwin Terminal ก่อนอื่นให้ตรวจสอบตัวแปรสภาพแวดล้อม SHELL จากนั้นไฟล์ passwd (ตอนนี้ไม่มีอยู่) จากนั้นกลับไปที่ / bin / sh ซึ่งเป็นสิ่งที่ดูเหมือนว่าจะทำ โดยค่าเริ่มต้น.

ฉันสามารถตั้งค่าตัวแปรสภาพแวดล้อม SHELL ใน Windowsเป็น/usr/bin/zshและทำงานได้โดยไม่มีการเปลี่ยนแปลงอื่น ๆ ฉันเพิ่งเปลี่ยนมันสำหรับผู้ใช้ Windows ของฉันไม่ใช่ทั่วโลก

การตั้งค่าตัวแปรสภาพแวดล้อมอาจแตกต่างกันไปสำหรับ Windows รุ่นต่าง ๆ ลองค้นหา "สภาพแวดล้อม" ในแผงควบคุม Windows ของคุณ สำหรับฉันภายใต้ Windows 7 เป็นแผงควบคุม→ระบบ→การตั้งค่าระบบขั้นสูงซึ่งจะแสดงแผง / ไดอะล็อกควบคุมคุณสมบัติของระบบจากนั้นแท็บขั้นสูงจากนั้นปุ่มสภาพแวดล้อมตัวแปรซึ่งจะเปิดกล่องโต้ตอบตัวแปรสภาพแวดล้อมจากนั้นสร้าง ตัวแปรของผู้ใช้ใหม่ชื่อด้วยค่าSHELL /usr/bin/zshจากนั้นตกลงกลับออกมาจากสิ่งเหล่านั้นทั้งหมดและเริ่มต้นเงินใหม่


ตอนนี้ควร upvoted อย่างล้นเหลือ! วิธีที่ง่ายที่สุดที่ไม่ทำให้ยุ่งเหยิงกับการทำงานภายในของ Cygwin และสามารถย้อนกลับได้ง่าย!
pepoluan

1

แค่คิดว่าฉันจะเพิ่มคำตอบนี้ในกรณีที่ช่วยใครก็ได้ที่กำลังมองหา หากคุณใช้ chere (ซึ่งเพิ่มตัวเลือก "Bash prompt here" ให้กับเมนูบริบทคลิกขวาของโฟลเดอร์ใด ๆ ) คุณสามารถตั้งค่าเป็น zsh ("Zsh Prompt Here") ด้วย:

chere -i -t mintty -s zsh

0

หากคุณต้องการใช้เปลือก Cygwin ภายใน IDE Intellij ให้ใช้การตั้งค่าต่อไปนี้ภายในการตั้งค่า / เครื่องมือ / เทอร์มินัล

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

สิ่งนี้จะฝัง cygwin shell ไว้ใน intellij แทนที่จะวางไข่ในหน้าต่างใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.