ตามที่ระบุไว้bash
โดยทั่วไปจะมีอยู่ในการติดตั้งเริ่มต้นสำหรับหลาย distros zsh
สคริปต์ของคุณจะไม่สามารถเข้าถึงฐานผู้ใช้ที่ยิ่งใหญ่ที่สุดโดยอาศัย
คำถามสำคัญที่ต้องตอบก่อนออกแบบสคริปต์ของคุณคือ " ทำไมจึงมีความสำคัญว่าเชลล์สคริปต์ใดที่เรียกใช้สคริปต์? "
เชลล์ที่แตกต่างกันใช้ไวยากรณ์ที่แตกต่างกันหรือเสนอฟังก์ชั่นของเชลล์เพิ่มเติมที่เชลล์อื่นอาจไม่รองรับ ในการเขียนสคริปต์สำหรับ "โลกผู้ใช้ทั่วไปของ linux" ให้พิจารณาว่าสคริปต์ของคุณใช้ไวยากรณ์หรือฟังก์ชั่นเชลล์ใด ๆ ที่อาศัยสภาพแวดล้อมเชลล์เฉพาะหรือไม่
ตัวอย่างเช่นbash
เชลล์สนับสนุนการขยายบางอย่างที่ไม่ได้รับการสนับสนุนโดยdash
เชลล์เป้าหมายหรือ/bin/sh
จุดใดก็ตามที่อยู่บนระบบของผู้ใช้
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
ลองดำเนินการecho {1..10}
ด้วย/bin/sh
เมื่อเทียบกับ/bin/bash
และคุณจะได้รับผลที่แตกต่างกันมาก
เดียวกันจะไปสำหรับzsh
ซึ่งในขณะที่การสนับสนุนมากที่สุดbash
ไวยากรณ์ข้อเสนอการขยายตัวเพิ่มขึ้นและไวยากรณ์ที่ไม่ได้รับการสนับสนุนจากbash
เปลือก ดูตารางนี้เปรียบเทียบเชลล์สำหรับตัวอย่างเฉพาะ
คุณสามารถขยายฐานผู้ใช้ของคุณที่มีศักยภาพเกินโดยยึดมั่นในสคริปต์ที่ทำงานเมื่อเรียกว่ามีbash
#!/bin/sh -u
อย่างไรก็ตามสิ่งนี้ก่อให้เกิดคำถามสำคัญอีกข้อหนึ่งที่ถามว่า: " อะไรคือสิ่งที่เสียสละเพื่อแลกกับการพกพาที่มากขึ้น? "
พิจารณาว่าความแตกต่างที่เกี่ยวข้องกับความปลอดภัยฟังก์ชั่นประสิทธิภาพหรือสิ่งอื่นใดที่คุณรู้สึกว่ามีความสำคัญสำหรับสคริปต์ของคุณจะคุ้มค่าเสียสละ คุณอาจไม่ต้องการใช้สคริปต์ที่มีจุดอ่อนด้านความปลอดภัยที่รู้จักกันแพร่หลายเพราะมันทำงานได้ในสภาพแวดล้อมที่มากขึ้น
สคริปต์จำนวนมากดังนั้นจะเขียนสำหรับbash
การสนับสนุนสำหรับสคริปต์เหล่านี้ถูกนำมาใช้เป็นเกณฑ์เมื่อเปรียบเทียบหอยคำสั่ง ผู้คนจำนวนมากจะสามารถเรียกใช้สคริปต์ของคุณได้มากกว่าที่จะต้องอาศัยzsh
หรือไวยากรณ์อื่นใดที่ไม่รวมอยู่ในสภาพแวดล้อมของเชลล์
นอกจากนี้โปรดจำไว้ว่าในที่สุดคุณจะไม่สามารถควบคุมวิธีที่ผู้ใช้เรียกใช้งานสคริปต์ (เช่นมีประโยชน์สำหรับการดีบักสคริปต์ในเชลล์ที่แตกต่างกัน ):
จำไว้ว่าถ้าคุณใช้เชลล์เพื่ออ่านเชลล์สคริปต์ (“ sh scriptname”) แทนที่จะเรียกใช้งานโดยตรง (“ ./scriptname”) เชลล์จะถือว่าข้อคิดเห็นทั้งหมดที่จุดเริ่มต้นของเชลล์สคริปต์เป็นความคิดเห็น โดยเฉพาะอย่างยิ่งความคิดเห็นที่ระบุล่ามที่จะใช้เมื่อเรียกใช้งานสคริปต์ (“ #! / bin / sh -u”) จะถูกละเว้นเช่นเดียวกับตัวเลือกทั้งหมดที่แสดงข้างล่ามนั้น
ดังนั้นสิ่งที่ดีที่สุดที่คุณสามารถทำได้คือทำให้สคริปต์ของคุณเป็นแบบพกพาตราบใดที่ไม่มีการเสียสละอันยิ่งใหญ่ในการทำงานของมัน
นอกจากนี้คุณยังอาจเห็นทุบตีประชุมการเข้ารหัส - กองมากเกิน
zsh
อาจได้รับความนิยมในขณะที่คนอื่น ๆ (ภาคธนาคาร) มันแทบไม่เคยได้ยินมาก่อน ฉันคิดว่าคุณควรให้ข้อมูลมากขึ้นถ้าคุณต้องการคำแนะนำที่เหมาะสมกับสิ่งนี้