chsh ไม่เปลี่ยน $ SHELL


9

ฉันมีปัญหาในการเปลี่ยนค่าของ$SHELLในแอพ iTerm ของ OSX iTerm เริ่มต้น/bin/zshแล้ว แต่$SHELLดูเหมือนจะไม่เปลี่ยนค่าของ

ฉันทำอะไรลงไป:

  1. เปลี่ยน "คำสั่ง" /bin/zshในหน้าต่างการกำหนดค่าของ iTerm
  2. การดำเนินการที่จะเปลี่ยนเปลือกไปchsh/bin/zsh
  3. iTerm ยืนยันแล้วเริ่มใช้งาน /bin/zsh

หมายเหตุ # 1: ในแอพเทอร์มินัลหุ้นของ OSX "Terminal.app":

echo $SHELL
/bin/zsh

หมายเหตุ # 2: ในแอพเทอร์มินัลยอดนิยมของ OSX "iTerm.app":

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made

1
มีคุณมองใน/etc/shells? คู่มือระบุว่าหากเชลล์ที่คุณระบุไม่ได้อยู่ในไฟล์นั้นจะไม่ถือว่าเชลล์มาตรฐาน
Bob Dalgleish

คำตอบ:


5

ปัญหาคือการตั้งค่าความขัดแย้งของแอป "iTerm" กับเชลล์ หากต้องการแก้ไขฉันได้รีเซ็ตคำสั่ง "login shell" ในหน้าต่างการตั้งค่า iTerm:

iTerm.app -> การตั้งค่า -> โปรไฟล์ -> ทั่วไป -> คำสั่ง -> คลิกที่ "ล็อกอินเชลล์"

แล้วฉันจะดำเนินการปรับเปลี่ยนเป็นchsh/bin/zsh

ในการทำให้เกิดปัญหาอีกครั้ง (ตั้งค่า $ SHELL เป็น/bin/bash/แม้ว่าเชลล์ล็อกอินคือ/bin/zsh) ฉันเพิ่งเปลี่ยนการตั้งค่า "iTerm" กลับไปเป็น "Command: / bin / zsh /"


1

-sธงchshเพียงความพยายามที่จะเปลี่ยนเปลือกและอาจจะล้มเหลวเนื่องจาก Open Directory: ปกติยูนิกซ์ระบบ chsh 'จะปรับเปลี่ยน/etc/passwdรายการ อย่างไรก็ตามฉันสามารถเรียกใช้chshโดยไม่มีการขัดแย้งซึ่งทำให้ฉันแก้ไขและข้อมูลต่อไปนี้:

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

ฉันสามารถแก้ไขรายการ "Shell:" /bin/zshและหน้าต่างเทอร์มินัลถัดไปที่เปิดด้วยพรอมต์ Z-shell


ฉันพยายามchshโดยไม่ต้องแก้ปัญหา ยังไม่มีโชค ตัวแปรไม่เปลี่ยนแปลง /bin/zshในความเป็นจริงเมื่อบรรณาธิการโหลดมันแสดงให้เห็น
melvynkim

ลองเปลี่ยนเปลือกด้วยเครื่องมือแก้ไข ฉันทำการจับภาพหน้าจอของฉันเปลี่ยนจาก / bin / tcsh เป็น / bin / zsh และย้อนกลับ bonmot.ca/~nevin/chsh.mov
Nevin Williams

ขอบคุณมากที่สละเวลาบันทึกการโพสต์หน้าจอของคุณ! โซลูชันของคุณควรทำงานกับตัวจำลองเทอร์มินัลอื่น แต่ฉันไม่ได้เปลี่ยน$SHELLไปใช้ iTerm โปรดอ้างอิงคำตอบของฉันสำหรับรายละเอียด .. ขอบคุณ!
melvynkim

1

ดูที่นี่สำหรับคำอธิบายและวิธีแก้ปัญหาที่ดีเยี่ยมที่โพสต์โดย @ mklement0 [เกี่ยวข้องกับbashปัญหาการอัพเกรด

ฉันมีปัญหาที่คล้ายกันในการทำตรงข้ามกับระบบของฉัน (OS X 10.10.1): การสร้างbashเชลล์การเข้าสู่ระบบเริ่มต้นอีกครั้งหลังจากที่ฉันติดตั้งoh-my-zshซึ่งทำให้zshค่าเริ่มต้นแล้วอัพเกรดbashจาก 3.2.53 เป็น 4.3.30 โดยใช้ Homebrew ( ทำไม Apple จัดส่งโยเซมิตีพร้อมbashเวอร์ชันเก่า?)

ฉันคิดว่าSHELLตัวแปรสภาพแวดล้อมสะท้อนให้เห็นถึง แต่ไม่ได้ควบคุมเปลือกเข้าสู่ระบบเริ่มต้นที่แท้จริงสำหรับผู้ใช้ ตัวอย่างเช่นถ้าbashเป็นค่าเริ่มต้นของคุณและคุณเปิดbashหน้าต่างเชลล์ใหม่จากเทอร์มินัล$ export SHELL="/bin/zsh"; echo "$SHELL"จะแสดง/bin/zshแต่จะไม่มีการเปลี่ยนแปลงจริงเกิดขึ้นเพราะถ้าคุณเปิดหน้าต่างเชลล์ใหม่จากเทอร์มินัล$ echo $0แล้วคุณจะเห็น-bash( $0มีชื่อและพา ธ ของคำสั่งที่เริ่มต้นหน้าต่างเชลล์ในกรณีนี้bashและ-ถัดจากนั้นระบุว่าเป็นเชลล์ล็อกอิน)

ในฐานะที่เป็น @ mklement0 ชี้ให้เห็นเปลือกเข้าสู่ระบบเริ่มต้นที่เกิดขึ้นจริงสำหรับผู้ใช้ที่ถูกควบคุมโดยUserShellคุณสมบัติในการบันทึกของผู้ใช้ในฐานข้อมูลภายในของระบบ - dsclนี้สามารถสอบถามและปรับปรุงการใช้ยูทิลิตีบรรทัดคำสั่ง ข้อมูลนี้จะส่งผ่านไปยังแอปเทอร์มินัลของคุณเมื่อคุณเปิดหน้าต่างเชลล์

สิ่งที่chsh -s /bin/zshไม่สามารถเปลี่ยนนี้UserShellคุณสมบัติการตั้งค่าให้zsh- คุณสามารถตรวจสอบเรื่องนี้โดยการทำทันทีหลังจากนั้นและคุณจะเห็นdscl . -read /Users/$USER/ UserShell UserShell: /bin/zshแต่การเปลี่ยนแปลงจะไม่มีผลในหน้าต่างปัจจุบันจนกว่าคุณจะทำสิ่งที่ชอบexec su - $USERตามที่แนะนำโดย @ mklement0 หรือจนกว่าคุณจะปิดและเปิดหน้าต่างเชลล์


0

ลองเรียกใช้งานคำสั่ง: chsh -s /bin/zshจากเทอร์มินัล Mac เริ่มต้น


1
สิ่งนี้แตกต่างจาก OP อย่างไร
JMY1000

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