ฉันอยากรู้ว่าทำไมคนเราถึงต้องการใช้ bash แทน zsh ฉันหมายถึง zsh เต็มที่เข้ากันได้กับ bash อย่าเข้าใจฉันผิด: ฉันไม่ชอบทุบตีหรืออะไรก็ตาม ฉันแค่อยากรู้ว่ามีประโยชน์ในการใช้มันมากกว่า zsh หรือไม่
ดังนั้นมีเหตุผลอะไรที่จะใช้ทุบตีมากกว่า zsh?
ฉันอยากรู้ว่าทำไมคนเราถึงต้องการใช้ bash แทน zsh ฉันหมายถึง zsh เต็มที่เข้ากันได้กับ bash อย่าเข้าใจฉันผิด: ฉันไม่ชอบทุบตีหรืออะไรก็ตาม ฉันแค่อยากรู้ว่ามีประโยชน์ในการใช้มันมากกว่า zsh หรือไม่
ดังนั้นมีเหตุผลอะไรที่จะใช้ทุบตีมากกว่า zsh?
คำตอบ:
เหตุผลสองประการที่ทำให้นึกถึง:
ครั้งแรก - มันใช้ได้จริงทุกที่ ฉันมีระบบ Linux หลายระบบ (CentOS 4.x ในกรณีนี้) ซึ่งไม่ได้ติดตั้ง zsh ในทำนองเดียวกันฉันต้องสัมผัสกับระบบโบราณเช่น Solaris 2.6 ขึ้นไป, HP-UX 10 ขึ้นไปและ AIX รุ่นลั่นดังเอี๊ยด ดังนั้นฉันค่อนข้างจะต้องใช้ทุบตีบนคอมพิวเตอร์เหล่านี้ซึ่งฉันทำเพราะฉันแตะหลายสิบถ้าไม่นับร้อยเครื่องคอมพิวเตอร์ในแต่ละเดือนและเพื่อให้ได้ความสอดคล้องในส่วนต่อประสานของคุณคุณท้ายติดกับการใช้ ค่าเริ่มต้น
ประการที่สอง - มันใช้ได้จริงทุกที่ นี่หมายความว่าฉันสามารถเขียน bash shell script และมั่นใจได้ 99% ว่ามันจะทำงานเมื่อถ่ายโอนไปที่อื่น
ใช่เหตุผลเหล่านี้มีผิวเผินเหมือนกัน แต่เหตุผลเบื้องหลังนั้นแตกต่างกัน
โดยทั่วไปแล้วทุบตีมาพร้อมกับทุกระบบ zsh ไม่ ฉันรัก zsh แต่เพราะเรื่องนี้ผมใช้zsh สำหรับการใช้งานแบบโต้ตอบ แต่ทุบตีสำหรับทุกสคริปต์ของฉัน
ฉันพบว่าสิ่งนี้ช่วยให้ทุกอย่างง่ายขึ้นแม้ในขณะที่ฉันจับจ่ายอะไรก็ตามที่เข้ากันได้กับทุบตี (setopt SH_WORD_SPLIT?) ฉันยังคงพบความแตกต่างเล็กน้อย
zsh ไม่รองรับการใช้งานอย่างเต็มที่ มีความแตกต่างหลากหลาย zsh ที่ใหม่กว่าเข้ากันได้กับ bash (สนับสนุน =, exec ตอนนี้มีตัวเลือกการตั้งค่าสถานะพิเศษ ฯลฯ ) แต่ความเข้ากันได้เต็มรูปแบบไม่ใช่เป้าหมายแม้ภายใต้ "จำลอง"
ตัวอย่างเช่นสตริงย่อยของ bash คือ $ {foo: offset: len} แต่ใน zsh คือ $ foo [start, end] และนั่นเป็นเพียงตัวอย่างง่ายๆ
zsh เป็นเปลือกที่ได้รับอิทธิพล tcsh และ ksh ซึ่งทำสิ่งต่าง ๆ ในแบบของมันเอง ความเข้ากันได้ของ POSIX ไม่ใช่เป้าหมายอย่างชัดเจน แต่นักพัฒนาสามารถตอบสนองต่อแพตช์ที่เพิ่มตัวเลือก / เลียนแบบพฤติกรรมที่เข้าใกล้ POSIX ได้มากขึ้น แต่เมื่อคุณเริ่มเข้าสู่พลังของเชลล์จริงๆแล้วคุณเริ่มสร้างสคริปต์แบบเขียนอย่างเดียวยิ่งกว่าทุบตี
bash คือ POSIX sh + ksh + pedanticism พร้อมกับคุณสมบัติบางอย่างที่คัดลอกมาจาก zsh มันก็มีสคริปต์เขียนเพียง แต่เพราะมีผู้ประกอบการที่มีประสิทธิภาพน้อยกว่าคุณจะจบลงไม่ได้ใช้ความรัดกุมของ zsh และสิ่งที่อาจจะอ่านได้มากขึ้น (ยกเว้นสำหรับทุกข้อความที่จะหลีกเลี่ยงช่องว่างแยกที่โง่ ksh สไตล์หมายถึง $ อาร์เรย์แรก - องค์ประกอบของอาร์เรย์ไม่ใช่องค์ประกอบทั้งหมดของอาร์เรย์ ฯลฯ )
การเขียนสคริปต์ที่ใช้ประโยชน์อย่างเต็มที่จากพลังของเชลล์อย่างใดอย่างหนึ่งไม่ฉลาดยกเว้นว่าคุณอยู่ในสภาพแวดล้อมที่มีข้อ จำกัด (เช่นการเขียนสคริปต์ระบบ rc โดยที่ FS บางตัวอาจไม่ได้ติดตั้งเป็นต้น) ในฐานะที่เป็นอุดมคติใช้ Perl / Python / Ruby / อะไรก็ตามที่มีขนาดใหญ่พอที่คุณต้องการการแสดงออกที่ไม่ได้อยู่ใน Bourne sh ถ้าคุณต้องการให้คนอื่นรักษามันได้ เก็บข้อมูลเชลล์ไว้สำหรับสิ่งที่เกี่ยวข้องกับเชลล์แบบโต้ตอบ (การเขียนโปรแกรมเสร็จสิ้นแท็บ ฯลฯ )
ฉันจะไม่ใช้ทุบตีมากกว่า zsh ฉันจะใช้คำสั่ง shsh zsh แบบเปล่า ๆ หรือเปลี่ยนเป็นภาษาที่อาเรย์แบบเชื่อมโยงมีโอเปอเรเตอร์ที่เหมาะสม (ต่างจาก zsh พวกมันอยู่ที่ไหนอีกครั้ง 'รัดกุม') ฉันอาจเปลี่ยนสคริปต์ sh เป็นทุบตีถ้าฉันต้องการคุณสมบัติเล็ก ๆ น้อย ๆ ที่จะขยายสคริปต์การทำงานที่พิสูจน์แล้วที่มีอยู่และไม่มีเวลาที่จะเขียนมันตอนนี้
คำแนะนำของฉัน: หากคุณกำลังพกพาได้อย่างเต็มที่เขียนโดยใช้กฎของ Bourne shell ไม่ต้องกังวลกับ Korn shell extension ดังที่กล่าวไว้นั่นคือ "กล่องใหญ่" ที่เก่ากว่าโดยรอบที่ไม่มีเชลล์ GNU อยู่เลย
Bash ทำ "มากเกินไป" แล้ว ฉันมีเพื่อนในที่ทำงานที่ชอบ zsh แต่ฉันไม่รู้ว่ามันทำอะไร
อย่างไรก็ตามเขียนสำหรับ Bourne (หรือ "bourne อีกครั้ง") shell หรือถ้าคุณทำสคริปต์ที่กำหนดเองสำหรับกล่องเฉพาะจำนวนน้อยให้ข้าม "shell hell" ทั้งหมดและเพียงแค่เขียนด้วย perl หรือ python (หรืออะไรก็ตาม ล่ามที่ติดตั้งในเครื่องที่คุณชื่นชอบคือ)
นอกจากเหตุผลในการพกพาที่ให้ไว้ข้างต้นแล้วอีกอย่างหนึ่งอาจเป็นเพราะทุบตียังคงเพิ่มคุณสมบัติ
ตัวอย่างเช่นbash v4.x +แนะนำ:
วนซ้ำแบบซ้ำ:
rm -f ** / *. บันทึก
autocd:
พิมพ์ "/ tmp" แทน "cd / tmp"
โดยวิธีการที่คุณได้รับการบอกเล่าที่นี่หลายครั้งที่พบทุบตีจริงทุกที่เพื่อใช้ในการเขียนสคริปต์แบบพกพาซึ่งเป็นเท็จ
เรื่องไร้สาระ หากคุณรู้ว่าทุกระบบที่คุณสนใจมี BASH มันก็เป็นคำแถลงที่สมเหตุสมผลอย่างสมบูรณ์ BASH มีคุณสมบัติที่มีประโยชน์มากมายที่ไม่สามารถเลียนแบบได้ใน POSIX sh การใช้คุณสมบัติที่ไม่ใช่ POSIX เล็ก ๆ น้อย ๆ นั้นไม่ใช่ความคิดที่ดี แต่ใช้พวกเขาเมื่อคุณต้องการมันอย่างแท้จริง
การพกพานั้นไม่แน่นอน มันพิสูจน์ได้ว่าคุณต้องใช้มันไปไกลแค่ไหน ตัวอย่างเช่น Fedora ใช้คำสั่งเชลล์เพื่อสร้างแพ็คเกจ RPM และแนวทางบรรจุภัณฑ์ของ Fedora ระบุว่าเนื่องจากแพ็คเกจทั้งหมดจะต้องถูกสร้างขึ้นบน Fedora จึงเป็นเรื่องดีที่จะใช้คุณสมบัติทั้งหมดของ BASH แม้ว่า distros อื่น ๆ ตามหลักวิชาที่ไม่มี BASH อาจต้องการนำ RPMs กลับมาใช้ใหม่ แต่พวกเขาก็ตัดสินใจเรื่องความสะดวกในการพกพาตามการใช้งานจริงแทนที่จะเป็น "ALWAYS UZE POSIX !! 1" มนต์ของคุณ
ZSH ไม่ได้ติดอยู่ในฐานะเชลล์เริ่มต้นเพียงเพราะมันยุ่งเหยิงไปกับความคิดที่อ่อนหัด
โดยวิธีการที่คุณได้รับการบอกเล่าที่นี่หลายครั้งแล้วว่าbash
จะพบจริงทุกที่เพื่อใช้มันในการเขียนสคริปต์แบบพกพาที่เป็นเท็จ
วิธีการที่เหมาะสมในการเขียนสคริปต์ยูนิกซ์แบบพกพาไปใช้งานsh
ซึ่งจะพบได้ในระบบระวังทุก *
เชลล์อื่น ๆ ยกเว้นsh
เป็นเพียงเครื่องมือโต้ตอบรายวันของคุณ
เมื่อbash
เทียบกับ vs zsh
- bash
รวมอยู่ในชุด*nixes
มากกว่าzsh
ดังนั้นนี่คือข้อเสียของการติดตั้งซอฟต์แวร์เพิ่มเติมลงในระบบ - คุณต้องรักษาไว้ บางคนชอบ "คุณสมบัติเจ๋ง ๆ " zsh ดังนั้นพวกเขาจึงชอบจ่ายราคานั้นบางคนไม่ชอบ
จุดอื่น:
โปรแกรมส่วนใหญ่จะจัดเตรียมการทุบตีเสร็จสมบูรณ์โดยค่าเริ่มต้น สำหรับฉันมันเป็นเหตุผลที่จะไม่เปลี่ยน
[เพิ่มในกรกฎาคม 2013] หลังจากใช้ zsh มาสองสามปีแล้วหลังจากความคิดเห็นข้างต้นฉันต้องบอกว่าการเติมแท็บเสร็จสมบูรณ์ (แม้จะสร้างขึ้นภายในไม่มีการแก้ไขครั้งที่ 3) จะยอดเยี่ยมและดูเหมือนว่าเกินกว่าที่เสนอโดยทุบตี . :)