เหตุใดฉันจึงไม่สามารถเปลี่ยนเชลล์ด้วยคำสั่ง chsh ได้


12

ฉันเรียนรู้คำสั่งใหม่อย่างน้อยฉันก็คิดว่าเพราะคำสั่งนี้: chshไม่ทำงานตามที่อธิบายไว้

มันอธิบายว่าทำงานเช่นนี้:

  1. cat /etc/shells รู้ว่าเชลล์ใดติดตั้งอยู่แล้วเพื่อให้คุณสามารถเลือกได้
  2. ทำอย่างไรecho $SHELLให้รู้ว่าคุณใช้เชลล์ตัวไหน
  3. เลือกหนึ่งในเปลือกหอยและประเภท chsh -s /path/to/shell
  4. ป้อนรหัสผ่านและยืนยันecho $SHELLด้วยว่าคุณอยู่ในเชลล์ใหม่

ฉันได้ทำสิ่งนี้แล้วและฉันไม่ได้รับข้อความแสดงข้อผิดพลาดเมื่อป้อนรหัสผ่าน แต่ฉันยังอยู่ในเชลล์เดียวกัน

% echo $SHELL
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $SHELL
/bin/bash

5
คุณต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งก่อน
Rui F Ribeiro

7
โปรดอย่าโพสต์ภาพข้อความเทอร์มินัล สามารถคัดลอกและวางลงในเนื้อความของคำถามของคุณและไม่จำเป็นต้องโพสต์ภาพเว้นแต่ว่าคุณกำลังแสดงข้อผิดพลาดแบบกราฟิกหรือสิ่งที่คล้ายกัน
Sergiy Kolodyazhnyy


ฉันแก้ไขโพสต์ของฉันลบภาพและวางข้อความแทน แต่ภาพกลับคืนมา
sharkant

@sharkant ดูเหมือนว่าบางคนมีการแก้ไขในคิวการตรวจทานและได้รับการอนุมัติซึ่งแก้ไขโพสต์ของคุณหลังจากข้อเท็จจริง ฉันคิดว่าระบบแก้ไข SE จะไม่เขียนทับการแก้ไขใหม่ด้วยเก่า แต่ heh ใครจะรู้
Zan Lynx

คำตอบ:


19

ออกจากระบบและเข้าสู่ระบบอีกครั้ง

chshคำสั่งจะอัปเดต/etc/passwdไฟล์ แต่มันไม่ได้เปลี่ยนปัจจุบันเปลือกมิได้ค่าของ$SHELLตัวแปรในเปลือกปัจจุบัน (มันมีวิธีการทำที่ไม่ได้) นี่คือเหตุผลที่คุณต้องลงชื่อเข้าใช้อีกครั้ง คุณต้องเริ่มเซสชันการล็อกอินใหม่เพื่อให้การเปลี่ยนแปลงมีผล


ฉันไม่เข้าใจว่าเชลล์การเข้าสู่ระบบคืออะไรและฉันจะรู้ได้อย่างไรว่าฉันอยู่ในเชลล์การเข้าสู่ระบบหรือเชลล์การล็อกอินบางประเภท ฉันจะเริ่มเซสชันการเข้าสู่ระบบใหม่ได้อย่างไร
sharkant

1
@sharkant ประเด็นคือข้อมูลที่คุณเปลี่ยนในนั้น/etc/passwdจะไม่ถูกอ่านจนกว่าคุณจะเข้าสู่ระบบในครั้งต่อไป คุณจะต้องออกจากระบบอย่างสมบูรณ์และเข้าสู่ระบบอีกครั้งเพื่อให้การเปลี่ยนแปลงมีผล หากคุณล้มเหลวในการทำเช่นนี้การรีบูตเครื่องก็จะทำงานเช่นกัน
Kusalananda

1
ฉันคิดว่าฉันเข้าใจคุณในเวลานี้ดังนั้นคำสั่ง chsh -s / path / to / shell จะไม่เปลี่ยนทันทีที่เชลล์ฉันอยู่ แต่จะเปลี่ยนรายการภายใน / etc / passwd ซึ่งจะมีผลเมื่อฉันเริ่มเชลล์?
sharkant

@sharkant นั่นเป็นวิธีการทำงาน! ฉันมีความสุขในที่สุดฉันก็เข้าใจคุณเข้าใจผิด ฉันจะอัปเดตคำตอบ
Kusalananda

1

ใช้คำสั่งยูทิลิตี้usermodทำงานในกรณีของฉัน ทำงานบน Ubuntu 18.04

  1. ก่อนอื่นให้ตรวจสอบค่าปัจจุบัน

grep nameofuser /etc/passwd

  1. เปลี่ยนมัน

sudo usermod --shell /bin/bash nameofuser

  1. ตรวจสอบมัน

grep nameofuser /etc/passwd

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