ฉันจะเปลี่ยนเชลล์เริ่มต้นเป็นทุบตีได้อย่างไรหากฉันไม่สามารถเข้าถึง chsh หรือ / etc / passwd ได้?


8

ฉันกำลังทำงานกับบัญชี Linux ระยะไกลของมหาวิทยาลัยและเชลล์เริ่มต้นนั้นน่าเศร้าcshหากไม่มีแท็บที่สมบูรณ์ ฉันจะเปลี่ยนเชลล์เริ่มต้นของบัญชีเป็นbashอย่างไร chshไม่สามารถใช้งานได้.


1
มหาวิทยาลัยใช้ระบบใดในการจัดเก็บบัญชี ldapmodifyอาจทำงานได้
user1686

หรือถ้าพวกเขากำลังใช้ NIS ypchshควรเป็นคำสั่งที่เหมาะสม
m000

ถ้าคุณเพียงต้องการเสร็จสิ้นแท็บคุณสามารถเพิ่มเหล่านี้เพื่อคุณ ~ / .cshrc และset filec set autolist
Hennes

คำตอบ:


11

คุณควรลองถามระบบดูแลระบบของคุณว่าพวกเขาสามารถเปลี่ยนเชลล์เริ่มต้นให้คุณได้หรือไม่ หากพวกเขาไม่สามารถหรือไม่ (เช่นกรณีเมื่อฉันอยู่ในวิทยาลัย) วิธีแก้ปัญหาที่ฉันใช้คือการเพิ่ม

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

.cshrcไปยัง (ตรวจสอบให้แน่ใจว่าได้แทนที่/path/to/bashด้วยเส้นทางจริงซึ่งอาจเป็นเวอร์ชันbashที่อยู่ภายใต้โฮมไดเร็กตอรี่ของคุณถ้าเวอร์ชั่นที่ระบบจัดให้นั้นล้าสมัยสำหรับรสนิยมของคุณ) สำหรับประสิทธิภาพมันดีที่สุด เมื่อต้องการทำสิ่งนี้ให้เร็วที่สุด.cshrcเท่าที่จะเป็นไปได้เพื่อหลีกเลี่ยง.cshrcการประมวลผลเพิ่มเติมที่จะกลายเป็นที่สงสัยเมื่อbashแทนที่cshกระบวนการ


สิ่งนี้ไม่ได้ผลสำหรับฉันที่มหาวิทยาลัยของฉัน ฉันอาจจะต้องคุยกับดูแลระบบ
2rs2ts

3

คุณสามารถเชื่อมต่อกับ

ssh -t yourhost bash

เพื่อรัน Bash shell โดยอัตโนมัติเมื่อคุณเข้าสู่ระบบ


จากความคิดเห็นด้านล่างคุณสามารถดูทางเลือกอื่น

ssh -t yourhost exec bash

execจะเรียกใช้กระบวนการใหม่และออกจากกระบวนการเก่าดังนั้นcshกระบวนการจะออกโดยตรง

หากผนวก-lท้ายคำสั่งเป็นอาร์กิวเมนต์ของ Bash คำสั่งนั้นจะถือว่าเป็นเชลล์ล็อกอิน แต่อาจไม่จำเป็น


1
ssh -t yourhost exec -a bash -l bashเพื่อแทนที่เชลล์ดั้งเดิมทั้งหมดแทนที่จะรันเป็นกระบวนการภายในเชลล์เริ่มต้น
chepner

@chepner: น่าสนใจฉันใช้วิธีง่ายๆssh -t host bashในสถานการณ์ที่คล้ายกัน แต่วิธีการของคุณดีกว่า ฉันไม่เคยคิดexecเลยขอบคุณ! ฉันจะอัปเดตโพสต์ด้วยคำแนะนำของคุณ
Daniel Andersson

แต่ฉันก็ยังนึกไม่ถึงว่าใช้อาร์กิวเมนต์สำหรับbashคำสั่งในexecตัว
chepner

@chepner: อ่าใช่ฉันพยายามมันในขณะนี้ในพื้นที่ที่มี zsh เป็นเปลือกเริ่มต้นและจะล้มเหลวทั้งในและ-a -lฉันจะแก้ไขตัวอย่างในคำตอบของฉัน
Daniel Andersson

0

ทางออกที่ดีที่สุดที่ฉันพบคือหนึ่งใน stackexchange นี่คือ link stackexchangeและนี่คือทางออก:

สร้างไฟล์. profile ใน dir ที่บ้านของคุณและวางต่อไปนี้หรือเพิ่มที่ส่วนท้ายของ. profile ของคุณหากคุณมีอยู่แล้ว

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

0

ฉันค้นหามากเมื่อใช้การรับรองความถูกต้องของ LADP ผ่าน PAM ฉันคิดว่าทางออกที่ดีที่สุดคือการใส่ SHELL = / bin / bash exec / bin / bash ในไฟล์. profile ในโฮมไดเรกทอรีผู้ใช้ของคุณ

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