วิธีทำให้ zsh ทำงานเป็นเชลล์ล็อกอินบน Mac OS X (ใน iTerm)


149

เมื่อ zsh ถูกตั้งค่าเป็น login shell บน Mac OS X, เมื่อเริ่มต้นโดย iTerm, zsh ไม่คิดว่ามันถูกเรียกใช้เป็นเชลล์การเข้าสู่ระบบ, แม้ว่ามันจะเริ่มต้นเป็น '-zsh' ('-' ถูกใส่เป็น อักขระตัวแรกของ arg [0]) ซึ่งควรจะหมายความว่ามันควรจะเริ่มเป็นเชลล์ล็อกอิน

ดังนั้นเมื่อฉันตั้งค่าเปลือกเข้าสู่ระบบเพื่อทุบตีทุบตีตระหนักถึงครั้งแรกนี้ '-' ใน $ 0 และทำงานเป็นเปลือกเข้าสู่ระบบ แต่ zsh ไม่แม้ว่ามันจะดูเหมือนว่าควร

มีวิธีทำให้ zsh รู้จัก '-' ใน arg [0] หรือทำให้ iTerm รันเชลล์ด้วยอาร์กิวเมนต์บรรทัดคำสั่ง --login หรือไม่?


2
ฉันรู้มานานแล้วตั้งแต่มีคนถามคำถามนี้ แต่โปรดพิจารณายอมรับคำตอบของ @Harold Putman มันเป็นคำถามเดียวกับที่อยู่
Craig S. Cottingham

คำตอบ:


106

ใน iTerm -> การตั้งค่า -> แท็บโปรไฟล์ -> ตั้งค่าทั่วไปส่วนคำสั่งเป็น: / bin / zsh --login

/ bin / zsh --login


1
iterm2 ดูเหมือนจะไม่มีตัวเลือกนี้ในแท็บทั่วไป แนวคิดใดบ้างที่จะประสบความสำเร็จใน iterm2 โดยไม่ต้องเปลี่ยนเชลล์ล็อกอิน
Lloyd Dewolf

6
เป็นแท็บทั่วไปบนแท็บโปรไฟล์
Harold Putman

Aha! สับสนว่ามีทั้งแท็บทั่วไปและโปรไฟล์> ทั่วไป
Lloyd Dewolf

2
หรือในกรณีของฉัน/usr/local/bin/zsh --login
YAR

ฉันใช้สิ่งนี้เพื่อเปลี่ยนเปลือกแทนที่จะแก้ไข / etc / shell เนื่องจากสิ่งนี้ควรป้องกันปัญหาที่เปลือกของฉันไม่สามารถใช้งานได้หลังจากการอัปเดต
พะยอม

220
chsh -s $(which zsh)

คุณจะได้รับพร้อมท์ให้ใส่รหัสผ่านของคุณ แต่เมื่อคุณอัปเดตการตั้งค่าใด ๆ เซสชัน iTerm / Terminal ใหม่ที่คุณเริ่มบนเครื่องจะเริ่มต้นเป็น zsh


2
โปรดอ่านคำถามก่อน ปัญหาไม่ได้อยู่ในการตั้งค่าเปลือกเริ่มต้นปัญหาคือว่า zsh ตรวจไม่พบว่ามันเริ่มต้นเป็นเปลือกเข้าสู่ระบบ
Ivan Tarasov

1
อ่าขอโทษด้วย คุณได้ลองใช้แฟล็ก -i เพื่อบังคับให้ zsh เริ่มทำงานในโหมดโต้ตอบหรือไม่?
Damien Wilson

11
คำตอบของเขาทำให้ zsh ทำงานเป็นเชลล์ล็อกอินบน Mac OS X ใน iTerm มันไม่ได้ไปทำอย่างที่คุณอธิบายพยายาม แต่มันแก้ปัญหาที่คุณถาม (ในชื่อแทนที่จะเป็นเนื้อหา) นำเสนอ คำถามที่คุณลงท้ายด้วยในร่างกายเป็นคำถามที่แตกต่างอย่างสิ้นเชิง หากนั่นคือคำถามจริงของคุณ (แทนที่จะเป็นวิธีที่จะทำให้ zsh ทำงานเป็นเชลล์การเข้าสู่ระบบ) ดังนั้นบางทีคุณควรตั้งคำถามใหม่ในชื่อ
iconoclast

45
ถ้าchshจะบอกคุณบางอย่างเช่น "ไม่เป็นมาตรฐานเปลือก" /etc/shellsก็หมายความว่าคุณต้องเพิ่มเส้นทางของเปลือกใหม่ที่จะ นี้สามารถเกิดขึ้นได้ถ้าคุณกำลังเปลี่ยนแปลงเช่นกับรุ่นของ zsh ติดตั้งโดย homebrew /usr/local/bin/zshซึ่งทำให้มันอยู่ใน
shovavnik

1
chsh -s $(which zsh)สามารถใช้เพื่อให้แน่ใจว่าเส้นทางที่ถูกต้อง
Daniel Doezema

56

ไปที่บานหน้าต่างผู้ใช้ & กลุ่มของการตั้งค่าระบบ -> เลือกผู้ใช้ -> คลิกที่ล็อคเพื่อทำการเปลี่ยนแปลง (มุมล่างซ้าย) -> คลิกขวาที่ผู้ใช้ปัจจุบันเลือกตัวเลือกขั้นสูง ... -> เลือกเชลล์ล็อกอิน: / bin / zsh และตกลง


3
สิ่งนี้ช่วยชีวิตฉันไว้ ฉันอยู่บน osx mavericks
qed

ใช้งานได้กับ zsh เริ่มต้นไม่ใช่สำหรับที่ติดตั้งโดยชง
อิหม่ามบักซ์

19

chsh -s <path_to_shell>คำสั่งที่จะเปลี่ยนเปลือกที่เริ่มต้นคือ เชลล์เริ่มต้นใน mac OS X ได้รับการติดตั้งภายในbinไดเรกทอรีดังนั้นหากคุณต้องการเปลี่ยนเป็นค่าเริ่มต้นzshคุณจะต้องใช้สิ่งต่อไปนี้

chsh -s /bin/zsh

หากคุณใช้เวอร์ชันอื่นzshคุณอาจต้องเพิ่มเวอร์ชันนั้น/etc/shellsเพื่อหลีกเลี่ยงข้อความเชลล์ที่ไม่เป็นมาตรฐาน ตัวอย่างเช่นหากคุณต้องการเวอร์ชันของ home-brew zshคุณต้องเพิ่ม/usr/local/bin/zshไฟล์ดังกล่าวซึ่งคุณสามารถทำได้ในคำสั่งเดียวsudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"แล้วรัน

chsh -s /usr/local/bin/zsh

หรือถ้าคุณต้องการที่จะทำสิ่งทั้งหมดในหนึ่งคำสั่งเพียงแค่คัดลอกและวางสิ่งนี้ถ้าคุณติดตั้ง zsh ไว้แล้ว

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh

2
ฉันไม่คิดว่ามันยุติธรรมที่จะลงคะแนนคำตอบนี้ อุปกรณ์ประกอบฉากเพราะมันเป็นสิ่งเดียวที่กล่าวถึง/etc/shellsในร่างกายของคำตอบนั้นเอง
heymatthew

1
@Heymatthew เหตุผลที่มันถูกลดระดับลงก็เพราะมันไม่ได้ตอบคำถามที่ถาม มันตอบคำถามที่ไม่เกี่ยวข้องกันอย่างสิ้นเชิง
Tabitha

17

คุณลองแก้ไขรายการเชลล์ในการตั้งค่าบัญชีแล้วหรือยัง

ไปที่การตั้งค่าบัญชีปลดล็อกและคลิกขวาที่บัญชีผู้ใช้ของคุณสำหรับกล่องโต้ตอบการตั้งค่าขั้นสูง เชลล์ของคุณควรเป็น / bin / zsh และคุณสามารถแก้ไขการร้องขอได้อย่างเหมาะสม (เช่นเพิ่มอาร์กิวเมนต์ --login)


น่าเสียดายที่มันใช้งานไม่ได้: ฉันสามารถตั้งค่าเชลล์ที่ฉันชอบโดยใช้ chsh (ตราบใดที่ฉันมีเชลล์นี้อยู่ในรายการ / etc / shells) อย่างไรก็ตามไม่มีใครสามารถเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งลงในเชลล์ไดอะล็อกการตั้งค่าขั้นสูง เพื่อเริ่มเชลล์ขึ้น)
Ivan Tarasov

ไวยากรณ์บางส่วนมีการเปลี่ยนแปลงใน OS X แต่ส่วนสำคัญคือการตั้งค่าเปลือกเริ่มต้นของคุณเป็น / bin / zsh ตามที่ไบรอันระบุข้างต้น
engineerDave

7
ฉันรักดังนั้น ฉันใช้คำตอบนี้แล้วและเพิ่งรู้ว่าฉันเขียนมันเกือบ 4 ปีที่แล้ว!
Brian Agnew

-2

ใช้loginยูทิลิตีนี้เพื่อสร้างเชลล์ล็อกอิน สมมติว่าผู้ใช้ที่คุณต้องการลงชื่อเข้าใช้มีชื่อผู้ใช้Aliceและติดตั้ง zsh ไว้แล้ว/opt/local/bin/zsh(เช่นเวอร์ชันล่าสุดที่ติดตั้งผ่าน MacPort) ใน iTerm 2 ไปที่การตั้งค่าโปรไฟล์เลือกโปรไฟล์ที่คุณต้องการตั้งค่าและป้อนในคำสั่ง :

login -pfq Alice /opt/local/bin/zsh

ดูman loginรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกต่างๆ


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