การรัน chsh ไม่เปลี่ยนเชลล์


19

ฉันต้องการเปลี่ยนเชลล์จาก bash เป็น zsh

ฉันได้ลองใช้งานสิ่งต่อไปนี้ขณะที่ล็อกอินในฐานะผู้ใช้ของ zol:

$ chsh -s /bin/zsh
$ sudo chsh -s /bin/zsh zol
$ su -c 'chsh -s /bin/zsh zol'
# The above all results with:
$ password:
$ chsh: Shell not changed.

# zsh exists in /etc/shells.. 
chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh

มีอะไรผิดปกติ? ฉันจะแก้ไขได้อย่างไร


คุณลองเรียกใช้ 'chsh' โดยไม่มีข้อโต้แย้งใด ๆ ว่าเป็น zol หรือไม่
George M

คุณใช้บางอย่างเช่น ldap / nis เป็นต้นหรือไม่?
Ulrich Dangel

ที่สำคัญกว่านั้น: ทำไมมันไม่ให้ข้อมูลเพิ่มเติมกับคุณ? ข้อความนั้นอาจใช้ได้สำหรับ sysop ที่ปรุงรสแล้ว แต่สำหรับคนส่วนใหญ่มันหยาบคายอย่างจริงจัง ฉันกำลังเผชิญกับปัญหาเดียวกัน 5 ปีและผู้คนสงสัยว่าทำไมลินุกซ์ใช้เวลา 20 ปีที่ผ่านมาไม่ได้อยู่บนเดสก์ท็อป
flurbius

คุณคาดว่าเชลล์ของคุณจะเปลี่ยนทันทีหรือไม่ คุณเปลี่ยนเชลล์ล็อกอินด้วยchshซึ่งหมายความว่าคุณจะต้องล็อกอินอีกครั้ง
Kusalananda

คำตอบ:


17

การแก้ไขบัญชีผู้ใช้จะไม่ถูกบันทึกหากคุณเปิด / etc / passwd (vim / etc / passwd) เมื่อคุณพยายามเปลี่ยนข้อมูล

ทางเลือก: ลองกับ usermod (เช่นเดียวกับ zol):

$ usermod -s /bin/zsh 

หรือ

$ sudo usermod -s /bin/zsh zol

หากวิธีนี้ใช้ไม่ได้ผลให้แก้ไข/etc/passwdด้วยมือ

sudo vipw
# set zol's shell to /bin/zsh
:wq

6
โปรดใช้vipwแทนvimขณะที่พวกเขาตั้งล็อคไฟล์ที่เหมาะสม
Ulrich Dangel

"การแก้ไขบัญชีผู้ใช้จะไม่ถูกบันทึกหากคุณเปิด / etc / passwd" - แต่ทำไม?
Thanatos

มันไม่ทำงานเหมือนกัน เมื่อฉันรีสตาร์ทเครื่องเสมือน Linux (centos7) มันก็ใช้ได้แล้วตอนนี้!
WeizhongTu

1

เมื่อใดที่จะเรียกใช้ "chsh -l" หากคุณเห็น:

/usr/bin/zsh
/bin/zsh

จากนั้นใช้:

chsh -s /usr/bin/zsh

คำเตือน: คำสั่งถูกเรียกใช้บน Fedora 25 ในubuntunตัวเลือก "-l" จากนั้นไม่ทำงาน


-lเป็นตัวเลือกที่ไม่ถูกต้องสำหรับฉัน ฉันใช้ Ubuntu 16.04
byxor

ขออภัยฉันไม่ให้ข้อมูลเกี่ยวกับ distro ที่คำสั่งทำงาน ในกรณีของฉันฉันทดสอบใน Fedora 25 ฉันลองใช้ Ubuntu และฉันยืนยันว่าตัวเลือก "-l" หมดแล้ว
lourencoccc

โดยไม่คำนึงถึงchsh -sทำงานอย่างสมบูรณ์ ขอบคุณ
byxor

ตัวเลือกนั้นใช้ได้กับ Manjaro แต่ก็ยังปฏิเสธที่จะเปลี่ยนเชลล์
flurbius

0

ถ้าคุณเห็นchsh: Shell not changed.มันอาจหมายถึงว่าเชลล์นั้นเปลี่ยนไปแล้ว

ตรวจสอบว่าเชลล์อยู่ในรายการใด:

cat /etc/passwd | grep `cd; pwd`

หากถูกต้องให้ออกจากระบบและกลับเข้ามาใหม่เพื่อให้การเปลี่ยนแปลงมีผล


0

เพิ่งเจอกับสิ่งนี้ ไม่ว่าสิ่งที่ฉันทำในการเข้าสู่ระบบและออกไปด้านนอกจะไม่เปลี่ยนเปลือกของฉัน แต่มันก็ถูกระบุไว้ใน / etc / shells และใน / etc / passwd

ในที่สุดมันก็เริ่มกับฉัน: บางทีฉันอาจเข้าสู่ระบบด้วยเซสชั่นอื่น?

ดังนั้นฉันทำ

# who

และมันผ่านการตรวจสอบว่าฉันมีช่วงเปิดอื่น ๆ จากเครื่องอื่น:

dom  pts/0        Nov 6 13:53 (10.1.6.121)
dom  pts/1        Nov 5 12:30 (10.1.6.165)
dom  pts/2        Nov 4 12:33 (10.1.6.197)

จากนั้นฉันก็:

pkill -KILL -u dom

ฉันออกจากระบบทันทีและหลังจากลงชื่อเข้าใช้อีกครั้ง: Voila! เชลล์เปลี่ยนไป

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