วิธีการเปลี่ยน Login Shell บน Mac OS X จาก bash เป็น zsh?


90

ฉันพยายามที่จะเปลี่ยนเข้าสู่ระบบเชลล์แห่ง Mac OS X จากไปbash zshฉันเห็นว่าเป็นไปได้ใน Mac OS X Leopardแต่สำหรับ OS X Lion ฉันไม่สามารถหาวิธีได้ ฉันหวังว่ามันเป็นไปได้ที่จะเปลี่ยนเปลือกเข้าสู่ระบบจากทุบตีเป็นอย่างอื่น ฉันไม่แน่ใจว่าจะหาที่ไหน


หลังจากเปลี่ยนเชลล์เป็น zsh ฉันยังต้องเปิด zsh ด้วยตนเอง การออกจากระบบไม่ได้ช่วยอะไร จากนั้นฉันเปลี่ยน zsh เป็นเชลล์การเข้าสู่ระบบสูงสุด ออกจากระบบและมี

1
หากไม่มีอะไรอื่นคุณสามารถแก้ไข. bashrc เพื่อค้นหาและเรียกใช้ zsh if [ -x /usr/local/bin/zsh ] ; then exec /usr/local/bin/zsh fi. คำแนะนำเมื่อปรับเปลี่ยนสคริปต์เริ่มต้นเชลล์ตรวจสอบให้แน่ใจว่าเชลล์ยังคงทำงานและเริ่มต้นใหม่ในหน้าต่างอื่น - ถ้าคุณแตกมันคุณยังมีที่ที่ง่ายต่อการแก้ไข
Dan Pritts

คำตอบ:


101

คุณสามารถเปลี่ยนเปลือกผู้ใช้โดยคำสั่งต่อไปนี้:

chsh -s /bin/zsh

หมายเหตุ: ในการเปลี่ยนสำหรับเชลล์ที่ไม่ได้มาตรฐานตรวจสอบให้แน่ใจว่าได้เพิ่มพา ธ ไปยัง/etc/shellsไฟล์


4
ผมติดตั้งรุ่นที่ใหม่กว่า zsh กับ Homebrew ซึ่งทำให้ zsh /usr/local/bin/zshใน แต่น่าเสียดายที่ chsh chsh: /usr/local/bin/zsh: non-standard shellไม่อนุญาตให้นี้บอก คำตอบของ Daniel Beck เป็นคำตอบที่เหมาะสมในกรณีนี้
adam_0

43
หากคุณได้รับปัญหากับเปลือกหอยที่ไม่ได้มาตรฐานฉันคิดว่าคุณควรจะสามารถที่จะเพิ่ม/usr/local/bin/zshไป/etc/shellsและมันควรจะแก้ปัญหาที่
Mike Meyers

13
ข้อมูลการติดตั้ง homebrew zsh ไม่แนะนำให้คุณเพิ่มลงใน / etc / shells: ==> Caveats To use this build of Zsh as your login shell, add it to /etc/shells.
George

บางครั้งไม่ทำงาน @ คำตอบของ frank ทำให้มั่นใจได้ว่า
oliverbarnes

1
@Awesome_girl โดยค่าเริ่มต้น/etc/shellsเป็นเจ้าของและสามารถเขียนได้โดยเท่านั้น root (the superuser) คุณสามารถยกตัวอย่างเช่นการใช้sudo vi /etc/shellsการใช้งานsudo( s uper U ser ไม่ ) เพื่อเรียกใช้โปรแกรมแก้ไขเพื่อแก้ไขvi /etc/shellsฉันเพิ่งทดสอบระบบของฉันและยืนยันว่าไม่ได้รับการคุ้มครองโดย System Integrity Protection ดังนั้นคุณควรจะสามารถแก้ไขเป็น root ได้โดยไม่ต้องกระโดดผ่านห่วงเพื่อปิดการใช้งาน SIP
Spiff

54

วิธีการเดียวกับที่คุณลิงก์ไปยังคำถามของคุณยังคงใช้ได้ใน OS X Lion ผ่าน Sierra (10.12) ความแตกต่างเท่านั้น: บานหน้าต่างการตั้งค่าเป็นชื่อผู้ใช้และกลุ่มแทนการบัญชี

  1. เปิด "การตั้งค่าระบบ" → "ผู้ใช้ & กลุ่ม"
  2. ยกเว้นว่าไอคอนล็อคถูกปลดล็อคแล้วให้คลิกไอคอนล็อคและรับรองตัวคุณเอง
  3. คลิกบริบทจากผู้ใช้ในรายการชื่อผู้ใช้ (กดControlปุ่มค้างไว้ในขณะที่คลิกหรือคลิกขวาบนเมาส์ปุ่มสองปุ่มทางขวามือ)
  4. ในเมนูบริบทเลือก "ตัวเลือกขั้นสูง ... "
  5. เลือก "ล็อกอินเชลล์" ในแผ่นงานที่ปรากฏขึ้น

หมายเหตุที่ด้านบนของหน้าจอ "ตัวเลือกขั้นสูง" อ้างว่าคุณต้องรีสตาร์ทเพื่อให้การเปลี่ยนแปลงมีผล แต่คุณเพียงแค่ต้องออกจากระบบและกลับมาใหม่อีกครั้ง

ป้อนคำอธิบายรูปภาพที่นี่


1
ยืนยันว่าสามารถใช้งานได้ใน Mountain Lion เช่นเดียวกับการทำงานกับ "กระสุนที่ไม่ได้มาตรฐาน" ที่คุณอาจติดตั้งด้วยตัวคุณเอง (หรือติดตั้ง Homebrew)
adam_0

2
ยืนยันว่ายังใช้งานได้ใน 10.10 โยเซมิตี
ecnepsnai

4
คลิกขวาที่ชื่อผู้ใช้เพื่อเปิดเมนูที่มี "ตัวเลือกขั้นสูง" ฉันใช้เวลาสองสามนาทีในการค้นหา
pdwalker

1
เหตุใดจึงต้องมีคนออกไปข้างนอกเพื่อรวบรวมข้อมูลทั้งหมดก่อนที่จะสามารถตอบได้ ดังนั้นความคิดเห็นในกรณีที่คนอื่นทำให้สมมติฐานเดียวกันว่าคำตอบอยู่ที่นี่มากกว่าที่นี่และที่นั่น
pdwalker

1
@ jvriesem จริงแล้วมันทำ ฉันเดาว่าคุณข้ามขั้นตอนที่ 2
Daniel Beck

11

หรือ:

sudo dscl . change /users/$USER UserShell /bin/bash $(which zsh)

3
คุณช่วยอธิบายได้ไหมว่าทำไมสิ่งนี้ถึงตอบคำถาม
ChrisF

อย่าลืมเรียกใช้หลังจาก brew install zshนี้
mmell

3
นอกจากนี้ระวังว่าเส้นทางของ zsh ที่ติดตั้งผ่าน homebrew นั้นแตกต่างกัน ฉันทำมันเป็น:sudo dscl . change /users/$USER UserShell /bin/bash $(which zsh)
metakermit

1
คำเตือน: สิ่งนี้จะทำลายเชลล์ของคุณหากคุณคัดลอก / วางโดยไม่ตรวจสอบเส้นทางของ zsh ก่อน ทำในสิ่งที่ metakermit พูดแทน
radixhound

1

หากใครสงสัยว่าปัญหาเดียวกันเกิดขึ้นกับ macOS Sierra และคำสั่งต่อไปนี้อนุญาตให้ฉันเปลี่ยนเชลล์โดยไม่มีปัญหา:

chpass -s /usr/local/bin/zsh

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