เชลล์เริ่มต้นสำหรับเทอร์มินัลคืออะไร?


51

สมมติว่าฉันเปิดเทอร์มินัลแล้วป้อน / เรียกใช้คำสั่งเชลล์บางคำสั่ง

แต่ฉันไม่ได้เรียก Bash หรือกระสุนอื่น ๆ อย่างชัดเจน

โดยค่าเริ่มต้นคืออะไร

คำตอบ:


51

อันที่ระบุไว้ในบรรทัดของคุณใน/etc/passwd(มันเป็น:เส้นแยกและเปลือกเป็นคนสุดท้าย)

ตัวอย่างเช่นของฉัน:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

นี่คือ/bin/bash(ค่าเริ่มต้นของ Ubuntu)

คุณยังสามารถใช้chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

นี่เป็นการบอกเปลือกของฉัน/bin/bashและให้ฉันเปลี่ยนมัน

ในที่สุดecho $SHELLจะทำเช่นเดียวกัน:

$ echo $SHELL
/bin/bash

ถ้ามันทุบตีทำไมบางครั้งมันถูกเรียกอย่างชัดแจ้งเช่น sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ??
DrStrangeLove

ฉันคิดว่านั่นเป็นคำสั่งที่ไม่ดีเป็นการส่วนตัว - ไม่มีสิ่งใดที่ต้องใช้รูท ถ้ามันไม่ได้sudo netstat -an | grep LISTEN | grep -v ^unixก็จะเขียนได้ดีเป็น ฉันไม่เห็นเหตุผลใด ๆ ที่จะต้องปิดล้อมนั้นในเชลล์ย่อยของ bash
Cesium

2
@DrStrangeLove: หากมีมากกว่าหนึ่งคำสั่งในไพพ์จำเป็นต้องมีการอนุญาตรูทดังนั้นsudo bash -c "..."จะทำให้แน่ใจได้ว่ารูททั้งหมดจะถูกดำเนินการโดยรูท
Keith Thompson

หากคุณไม่ทราบว่าคำสั่งใดจำเป็นต้องใช้รูท (และทำไม) คุณไม่ควรรันคำสั่ง มิฉะนั้นเหตุใดจึงต้องเชื่อถือคำสั่ง / โปรแกรม / สคริปต์มากกว่าที่จำเป็น หากคุณทำไม่ได้commandA | sudo commandB | commandCคุณสามารถทำสิ่งsudo idแรกได้ (เรียกใช้idคำสั่งเป็นrootแต่ยังได้รับโทเค็น" ใช้ sudo โดยไม่ต้องใช้รหัสผ่าน " ซึ่งใช้เวลานานถึง (เริ่มต้น) 15 นาที
waltinator

2
ถ้าคุณใช้chshแล้วคุณต้องออกจากระบบและกลับเข้าสู่ระบบเพื่อดูการเปลี่ยนแปลงนี้
Neil Traft

17

GNU Bash เป็นเชลล์ที่ใช้โดยค่าเริ่มต้นในเทอร์มินัลบน Ubuntu อย่างไรก็ตามเมื่อสคริปต์ถูกเรียกใช้งานในการบูตระบบจะมีการใช้เส้นประเนื่องจากเป็นเส้นประที่ / bin / sh

สิ่งนี้ถูกกำหนดไว้ในตัวแปรสภาพแวดล้อม $ SHELL คุณสามารถตรวจสอบโดยการพิมพ์echo $SHELLใน terminal


14

การพิมพ์ข้อมูลต่อไปนี้จะแสดงว่าเชลล์ใดบ้างที่เทอร์มินัลเปิดด้วย:

echo $SHELL

อย่างไรก็ตามเพื่อค้นหาว่าคุณใช้เชลล์ชนิดใดในปัจจุบัน (คุณอาจเปลี่ยนแปลง)

ps -p $$

เช่นคุณจะเห็นว่าเชลล์นั้นทุบตีในผลลัพธ์ตัวอย่าง

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

อีกวิธีคือการใช้

echo $0

สิ่งนี้จะส่งคืนชื่อของเชลล์ปัจจุบัน


+1 เพื่อความง่ายecho $0
djthoms

คำตอบที่ดี! ขอบคุณด้วยเหตุผลบางอย่าง echo $ SHELL ใช้งานไม่ได้ (เคยใช้อันนั้นเสมอ) และสองทางเลือกของคุณใช้งานได้ ขอบคุณ!
wolfdawn

3

โดยค่าเริ่มต้นมันทุบตี:

env | grep ^SHELL=

ในกรณีส่วนใหญ่จะผลิต

SHELL=/bin/bash

ไม่จำเป็น. หากคุณสร้างผู้ใช้ใหม่ด้วยuseraddค่าเริ่มต้นshคือ $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk

+1 เพราะถึงแม้ว่าคำตอบที่เลือกต้องใช้การพิมพ์น้อย แต่ก็ดีที่มีมากกว่าหนึ่งวิธีในการทำบางสิ่งบางอย่าง

2

ในการรับพา ธ ไฟล์ของเชลล์ที่สามารถเรียกทำงานได้ในปัจจุบันสามารถใช้ได้

readlink -f /proc/$$/exe

ผลลัพธ์ที่เป็นไปได้คือ:

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