ความแตกต่างระหว่างคำว่า "เชลล์" และ "ทุบตี" คืออะไร?


11

"Shell" และ "Bash" ต่างกันอย่างไรและข้อกำหนดเหล่านี้หมายความว่าอย่างไร

เท่าที่ฉันรู้ไม่มีความแตกต่าง แต่ฉันเคยเห็นหนังสือหลายเล่มเกี่ยวกับ "Shell" และอื่น ๆ เกี่ยวกับ "Bash"!

ดังนั้นในกรณีที่ฉันต้องการทำงานกับ Terminal ใน Mac OS X และเขียนสคริปต์ทุบตีฉันสงสัยว่าฉันควรจะใช้หนังสือประเภทไหน


7
มันเป็นชั้นเรียนกับความแตกต่างอินสแตนซ์
Kaz

1
สื่อการอ่านที่น่าสนใจ: unix.stackexchange.com/questions/4126/…
Bernhard

1
เชลล์ตัวแรกถูกเขียนขึ้นโดยคนที่ชื่อบอร์น BASH เป็นตัวย่อของ 'Boune Again Shell' มันเป็นสิ่งสำคัญที่จะสนุก!
Kinjal Dixit

คำตอบ:


31

" shell " เป็นซอฟต์แวร์ใด ๆ ที่ให้ส่วนต่อประสานกับระบบปฏิบัติการ ตัวอย่างเช่นexplorer.exeเป็นเชลล์เริ่มต้นใน Windows (แม้ว่าจะมีทางเลือกอื่น ) และใน OS X Finder ก็มีฟังก์ชั่นการทำงานเหมือนกัน บน Linux / * ระวังเชลล์อาจเป็นส่วนหนึ่งของสภาพแวดล้อมเดสก์ท็อป (เช่นGnomeหรือKDE ) หรืออาจเป็นส่วนประกอบซอฟต์แวร์แยกต่างหากที่อยู่ด้านบนของมัน (เช่นUnityหรือCinnamon )

ตัวอย่างข้างต้นเป็นเปลือกกราฟิกทั้งหมดที่ใช้ร่วมกันของ windows, เมนู, ไอคอนและองค์ประกอบอื่น ๆ เช่นเพื่อให้ส่วนติดต่อผู้ใช้แบบกราฟิก (GUI) ที่สามารถโต้ตอบกับการใช้เคอร์เซอร์ของเมาส์ อย่างไรก็ตามในบริบทของซอฟต์แวร์เช่น Bash หรือการเขียนสคริปต์ "shell" มักจะหมายถึงล่ามบรรทัดคำสั่งซึ่งทำหน้าที่ส่วนใหญ่เหมือนกับหน้าที่เป็นเชลล์กราฟิกยกเว้นเป็นข้อความทั้งหมด

ทุบตีเป็นตัวอย่างที่เฉพาะเจาะจงของเปลือกบรรทัดคำสั่งและอาจจะเป็นหนึ่งในคนที่รู้จักกันดีที่สุดเป็นค่าเริ่มต้นในลินุกซ์จำนวนมากเช่นเดียวกับ OS X ได้มันถูกออกแบบมาแทนที่ที่บอร์นเชลล์ (ทุบตียืน สำหรับ "Bourne again shell") ซึ่งเป็นหนึ่งในUnix shell ตัวแรก

ตัวอย่างของเปลือกหอยบรรทัดคำสั่งบน Windows รวมถึงcmd.exe (aka Command Prompt) และPowerShell


3
ตัวค้นหามักจะไม่เรียกว่าเชลล์ใน OS X ส่วนใหญ่คุณสมบัติ GUI และการจัดการหน้าต่างได้รับการจัดการโดยกระบวนการอื่น
Lri

1
@LauriRanta วิกิพีเดียดูเหมือนจะไม่เห็นด้วย ไม่ว่าจะได้รับความช่วยเหลือจากกระบวนการอื่นหรือไม่ก็ตามหน้าที่ของมันคือช่วยให้ผู้ใช้สามารถโต้ตอบกับระบบปฏิบัติการพื้นฐานผ่าน GUI และเหมาะสมกับคำอธิบายของเชลล์กราฟิก
Indrek

1
ฉันเดาคำว่าเชลล์กราฟิกสามารถใช้กับแอปพลิเคชันจัดการไฟล์ได้ แต่โดยทั่วไปไม่ได้ใช้กับ OS X และ Finder นั้นเหมือนกับ Nautilus มากกว่าเชลล์ของ Windows หรือ Unity
Lri

6
@ LauriRanta: ตอบคำถามด่วนไอคอนของ Nautilus คืออะไร?
Lie Ryan

2
@LauriRanta จะไม่เป็นผู้สมัครที่ดีกว่าสำหรับกระสุนหรือไม่? การเปิดตัวโปรแกรมและการเปิดเอกสาร, Expose / Spaces / Mission Control, AFAIK Launchpad และตัวสลับงานรวมถึงคุณสมบัติ Dock ทั้งหมด
Daniel Beck

13

Bash เป็นหนึ่งในหลาย ๆ เชลล์

เชลล์บนระบบ Unix หรือ Unix เช่น OSX หรือ Linux เป็นแอปพลิเคชันโปรแกรมที่มีอินเตอร์เฟสบรรทัดคำสั่งให้กับระบบปฏิบัติการช่วยให้คุณพิมพ์คำสั่งและเรียกใช้งานได้ มีเชลล์ที่แตกต่างกันจำนวนมากให้เลือก แต่พวกเขาทั้งหมดให้ชื่อไฟล์ wildcard, piping, ที่นี่เอกสาร, การทดแทนคำสั่ง, ตัวแปรและโครงสร้างการควบคุมสำหรับการทดสอบเงื่อนไขและการทำซ้ำ

เชลล์ Unix ดั้งเดิมคือเชลล์Bourne , sh, เขียนโดย Stephen Bourne ที่ Bell Labs จากนั้นก็มาC เปลือกเขียนโดยบิลจอยที่เบิร์กลีย์, การปรับปรุงตั้งแต่เป็นtcsh กระสุนอื่น ๆ รวมถึงKorn shell , ksh, เขียนโดย David Korn, ที่ Bell Labs, และbash , "Bourne shell อีกครั้ง", เขียนโดย Brian Fox สำหรับโครงการ GNU แทนฟรีสำหรับดวลจุดโทษ

วันนี้ทุบตีน่าจะเป็น Unix shell ที่ได้รับความนิยมสูงสุด แต่ผู้คนจำนวนมาก (รวมอยู่ด้วย) ยังคงชอบ C เชลล์ที่อิงจากสิ่งที่พวกเราบางคนชอบ) ไวยากรณ์ที่ดีกว่า โดยทั่วไปมันเป็นเรื่องของรสนิยมดังนั้นฉันขอแนะนำให้อ่านบทความ Wikipedia ที่ฉันเชื่อมโยงไว้เพื่อช่วยคุณเริ่มต้น


2
เชลล์ไม่จำเป็นต้องใช้บรรทัดคำสั่งมีเชลล์กราฟิกจำนวนมากเช่น Nautilus, Windows Explorer, Finder เป็นต้นจุดสำคัญสำหรับเชลล์คือเชลล์ / ส่วนต่อประสานผู้ใช้ / เชลล์รอบฟังก์ชันระบบปฏิบัติการหลัก / การเรียกระบบ ie shells ให้การจัดการทรัพยากร (เช่นการจัดการไฟล์) และการจัดการกระบวนการ
โกหก Ryan

1
@LieRyan ไม่ได้เป็น shells แต่เป็นตัวจัดการไฟล์ เชลล์อนุญาตให้ล่ามคำสั่ง / สคริปต์แบบรวมทำงานภายใน ดูคำตอบของฉัน เพียงแค่สามารถเรียกใช้โปรแกรมจากตัวจัดการไฟล์ไม่ได้ทำให้มันเป็นเปลือก
Bill Rosmus

@BillR: คุณควรแจ้ง Gnome Shell เกี่ยวกับคำจำกัดความของคุณ
Paradroid

2
ฉันอยากเห็นด้วยกับ Lie Ryan และ Paradroid ว่าตอนนี้เชลล์แบบกราฟิกถือว่าเป็นเชลล์แล้ว ฉันลงทุนในกระบวนทัศน์บรรทัดคำสั่งเหมือนทุกคนและต่อต้านการยอมรับเชลล์กราฟิกเป็นเชลล์ในช่วง 90s แต่ด้วยวิดเจ็ตบนแผงควบคุมทั้งหมดและอะไรที่ไม่ได้อยู่ในเชลล์กราฟิกที่ทันสมัยตอนนี้ฉันเห็นด้วยกับการใช้งานทั่วไปคือการเรียกพวกเขาว่าเชลล์และการใช้งานนั้นถูกต้อง พวกมันตรงกับคำจำกัดความของเชลล์ซึ่งเป็นเลเยอร์ส่วนต่อประสานผู้ใช้ที่ค่อนข้างบางรอบ ๆ ระบบปฏิบัติการพื้นฐาน เชลล์แบบกราฟิกนั้นอ่อนแอกว่าในเรื่องที่ทุกคนจะเขียนสคริปต์อะไร แต่ผู้ใช้จำนวนมากไม่สนใจสิ่งนั้น
Nicole Hamilton

6

คำว่า 'เชลล์' มีชื่อดี มันเป็นเปลือกที่แท้จริงของ O / S ที่อนุญาตให้ผู้ใช้โต้ตอบกับคอมพิวเตอร์ เมื่อแรกเริ่มรู้สึกว่ามีน้อยมากถ้าส่วนติดต่อผู้ใช้แบบกราฟิก (ไม่มี windows :() ทุกอย่างทำในบรรทัดคำสั่ง แต่แม้บรรทัดคำสั่งต้องมีสถานที่อยู่อาศัยมันอาศัยอยู่และยังคงอยู่ในเปลือก .

กล่าวง่ายๆว่าเพื่อให้บรรทัดคำสั่งมีประโยชน์จำเป็นต้องมีคำแนะนำที่สามารถเรียกใช้ได้ ดังนั้นโปรแกรมจึงถูกสร้างขึ้นเพื่อให้ทำงานภายในเชลล์เพื่อให้บรรทัดคำสั่งใช้ โปรแกรมถูกจัดกลุ่มไว้ในแพ็คเกจของตัวเองอย่างแน่นหนาและตั้งใจจะทำงานร่วมกัน พวกเขารวมถึงโปรแกรมเช่น "ls" และ "grep", "ps", "sed" ฯลฯ นอกจากนี้ยังมีคำสั่งเปลี่ยนเส้นทางไฟล์เช่น ">" และ "<" และไพพ์ ("|") ที่สำคัญกว่านั้นพวกเขายังรวมถึงการเขียนโปรแกรมสร้างเช่นการดำเนินการตามเงื่อนไข (ถ้าอย่างนั้นสำหรับลูปในขณะที่ลูปวิธีการตรวจสอบสถานะกลับมาเมื่อคุณเรียกใช้คำสั่ง (เช่นถ้าคุณเรียกใช้ "ls" มันพบอะไร?) สิ่ง เช่นนั้น). นี่คือพื้นฐานของสคริปต์บรรทัดคำสั่ง (เชลล์) ที่ซับซ้อนยิ่งขึ้น

เมื่อมีคนใช้คำว่า 'Bash Shell' พวกเขากำลังพูดถึงล่ามบรรทัดคำสั่งที่เรียกว่า 'Bash' ที่ทำงานในเชลล์ O / S คุณอาจคิดว่ามันสั้นสำหรับ 'Bash Shell Interpreter' มีล่ามอื่น ๆ เช่น Bourne (Bash คือ 'Bourne Shell ที่ได้รับการปรับปรุงใหม่และสั้นสำหรับ Bourne Again Shell) นอกจากนี้ยังมี C-Shell, K-Shell (ซึ่งเป็นที่โปรดปรานของหลาย ๆ คนที่เขียนเชลล์สคริปต์ที่ซับซ้อน) และตัวแปร GNU อื่น ๆ ในช่วงหลายปีที่ผ่านมามันกลายเป็นธรรมเนียมในการอ้างถึงล่ามบรรทัดคำสั่งเฉพาะที่คุณใช้เป็นเชลล์เพราะไม่สามารถใช้งานได้ แต่ความจริงก็คือพวกเขาแตกต่างกัน

สาเหตุที่พวกเขารู้จักกันดีในฐานะล่ามบรรทัดคำสั่งไม่ใช่เชลล์จริง: เป็นเพราะพวกเขาอาศัยอยู่ในเชลล์และตีความคำสั่งทั้งหมดราวกับว่าพวกเขากำลังทำงานในโปรแกรม และเชลล์ไม่สนใจสิ่งที่คุณใช้ล่ามตราบใดที่มันเป็นไปตามมาตรฐานที่ถูกต้อง

และทำไมพวกเขาถึงถูกเรียกว่าล่ามมันเป็นเพราะพวกเขาเป็นล่ามจริง ๆ แม้ว่าคุณจะไม่ได้เรียกใช้สคริปต์อย่างชัดเจน (และสคริปต์เป็นเพียงไฟล์ข้อความของคำสั่งที่คุณสร้างขึ้นเพื่อให้คุณสามารถรันคำสั่งเดียวกันซ้ำแล้วซ้ำอีกโดยไม่ต้องพิมพ์ซ้ำอีกครั้ง) ตัวอย่างเช่นใช้คำสั่ง 'ls' ที่ต่ำต้อย เมื่อคุณเรียกใช้มันจะส่งคืนรายการไฟล์ แต่มันทำงานอย่างไรมีความสำคัญต่อคำถามของคุณ: จริง ๆ แล้วมันทำงานในบริบทของล่ามบรรทัดคำสั่งแม้ว่าคุณจะเรียกใช้สิ่งที่ดูเหมือนจะเป็นคำสั่งปิดง่าย นั่นคือมันทำงานราวกับว่ามันเป็นคำสั่งในส่วนของโปรแกรมที่ใหญ่กว่า มันทำงานราวกับว่ามันอยู่ในไฟล์สคริปต์ของเชลล์สคริปต์โดยไม่ต้องอยู่ในไฟล์สคริปต์ของเชลล์ ไฟล์สคริปต์เชลล์แบบไม่ระบุชื่อเหมือนเดิม

สิ่งที่คุณเรียกใช้บนบรรทัดคำสั่งมีสิ่งนี้เหมือนกัน (ไม่ว่าจะเป็นคำสั่งเดียวเช่น 'ls' หรือไฟล์สคริปต์ที่เต็มไปด้วยคำสั่งและตัววนซ้ำและคำสั่งแบบมีเงื่อนไข): มันถูกประมวลผลทั้งหมดโดยล่ามบรรทัดคำสั่ง ไม่ว่าจะเป็น Bash, C-Shell, K-Shell (ค่าดีฟอลต์บน AIX btw)

หากต้องการดูสิ่งที่ฉันหมายถึงทำไดเรกทอรี 'ทดสอบ':

mkdir test

ป้อนและเรียกใช้คำสั่ง folowing

grep hello * 

คุณจะได้รับคำตอบบางอย่างเช่น 'ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว' ตอนนี้ป้อนคำสั่ง

echo $?

($ บอกว่าบอกสิ่งที่คุณพบในคอมพิวเตอร์ที่มีความลับพูด) คุณควรเห็นมันคืนค่าตัวเลข (ควรเป็น) '2' นั่นคือโค้ดส่งคืนจาก grep ที่หมายถึง 'ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว' ตอนนี้เรียกใช้ต่อไปนี้:

echo hello > hello.txt
grep hello *
echo $?

คุณจะเห็นไฟล์ 'hello.txt' ถูกส่งคืนจากคำสั่ง grep เริ่มต้นและตอนนี้ควรเห็น 'echo $' คืนค่าตัวเลข '0' ซึ่งหมายถึงพบว่ามีบางอย่างเกิดขึ้นจริง

แม้ว่าคำสั่งแบบ off หนึ่งคำสั่งเหล่านี้ดูเหมือนว่าจะรัน แต่ตัวแปลบรรทัดคำสั่งจะทำหน้าที่เหมือนเป็นส่วนหนึ่งของโปรแกรมที่มีขนาดใหญ่กว่าและติดตามค่าที่ส่งคืน นั่นคือสาเหตุที่ถ้าคุณลืม * ในตอนท้ายของคำสั่ง grep มันจะไม่กลับมา เป็นที่รู้ว่าคำสั่งไม่สมบูรณ์และคาดว่าจะมีการป้อนข้อมูลมากขึ้น หลังจากทั้งหมดคุณอาจจะขอให้ grep ผลลัพธ์ของการวนซ้ำซึ่งถูกกฎหมายสมบูรณ์แบบในการเขียนและเรียกใช้บนบรรทัดคำสั่ง

บรรทัดล่างคือเชลล์คือเชลล์และล่าม (ไม่ว่าชื่อของคนที่คุณใช้ 'Bash', k-shell ฯลฯ ) จะแตกต่างกัน แต่บ่อยครั้งที่พวกเขาใช้แทนกันได้เนื่องจากในทันทีใดก็ตามพวกเขาจะถูกผูกติดกันอย่างสมบูรณ์


2

เชลล์เป็นส่วนต่อประสานกับผู้ใช้แบบข้อความ

Bash เป็นประเภทของเชลล์


2
"อินเทอร์เฟซผู้ใช้ทดสอบ" คืออะไร นอกจากนี้ยังเป็นการดีหากขยายคำตอบของคุณเล็กน้อย .. อย่างที่คุณเห็นจากคำตอบอื่น ๆ มันจะช่วยให้บริบทมากขึ้น
slhck

ขอโทษ ส่วนต่อประสานผู้ใช้แบบข้อความ คุณต้องการให้ฉันอธิบายสิ่งนั้นอย่างไร เชลล์เป็นวิธีบรรทัดคำสั่งของคุณในการโต้ตอบกับเคอร์เนลระบบปฏิบัติการ เชลล์ตีความคำสั่งของคุณและส่งต่อไปยังเครื่องซึ่งในทางกลับกันดำเนินการการดำเนินการที่จำเป็นที่เกี่ยวข้องกับคำสั่งที่คุณได้รับ? หากไม่มีคู่มือ 500 หน้าจะเป็นการยากที่จะอธิบายคำถามที่คลุมเครือนี้ได้อย่างมีประสิทธิภาพ ความพยายามของคำตอบนั้นสอดคล้องกับความพยายามของคำถาม คำถามนี้เป็นแอปเปิ้ลกับส้ม
HayekSplosives

หากคุณคิดว่าคำถามแสดงให้เห็นถึงความพยายามที่ไม่ได้หมายความว่าคุณไม่ควรใช้ความพยายามในการตอบคำถาม คำตอบของคุณเมื่อเปรียบเทียบกับคนอื่น ๆ ยังขาดรายละเอียดเล็กน้อย แน่นอนมันขึ้นอยู่กับคุณที่จะเพิ่ม
slhck

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

1

bashเป็นหนึ่งในshellครอบครัว แต่มีกระสุนจำนวนมาก

โดยตัวอย่างเช่นในMinix3มีของเปลือกมันไม่สนับสนุนเชื่อมโยงอาร์เรย์เช่นashbash4

POSIXมาตรฐานคือความพยายามที่จะทำให้ API แบบพกพาระหว่างเปลือกหอย differents และระบบปฏิบัติการ

ดูhttp://en.wikipedia.org/wiki/Unix_shell#Bourne_shell_compatible


1

bash เป็นหนึ่งในเชลล์จำนวนมากที่มีอยู่

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

เนื่องจากความจริงที่bashแพร่หลายอย่างมากก็มักจะบอกเป็นนัย ๆ ว่าสคริปต์เข้ากันได้กับมัน

หากคุณต้องการซื้อหนังสือให้ซื้อหนึ่งเล่มที่เขียนขึ้นเป็นพิเศษสำหรับเชลล์ที่คุณตั้งใจจะใช้ มันเป็นความคิดที่ดีที่จะอ่านความแตกต่างก่อนที่จะใช้จ่ายเงิน

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