/ / เมื่อใดควรใช้ #! / bin / bash แทน #! / bin / sh ในเชลล์สคริปต์

เมื่อใดควรใช้ #! / bin / bash แทนที่จะใช้ #! / bin / sh ใน Shell Script

เมื่อไหร่ดีกว่าใช้ bin-bash แทน bin-sh-in-a-shell-script-00

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

เซสชันคำถามและคำตอบของวันนี้มาถึงเราโดย SuperUser ซึ่งเป็นแผนกย่อยของ Stack Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถามตอบ

คำถาม

ผู้อ่าน SuperUser Hendre ต้องการทราบว่าเมื่อใดควรใช้งานได้ดีกว่า #! / bin / ทุบตี แทน #! / bin / ดวลจุดโทษ ในเชลล์สคริปต์:

เมื่อใดจึงเหมาะสมกว่าที่จะใช้ #! / bin / ทุบตี ค่อนข้างมากกว่า #! / bin / ดวลจุดโทษ ในเชลล์สคริปต์?

ควรใช้เมื่อใด #! / bin / ทุบตี แทน #! / bin / ดวลจุดโทษ ในเชลล์สคริปต์?

คำตอบ

grawity ผู้สนับสนุน SuperUser มีคำตอบสำหรับเรา:

ในระยะสั้น:

  • มีเชลล์หลายตัวที่ใช้ superset ของข้อกำหนด POSIX sh ในระบบต่างๆ / bin / sh อาจเป็นลิงค์ไปยัง ash, bash, dash, ksh, zsh เป็นต้นซึ่งจะเข้ากันได้กับ sh เสมอไม่เคย csh หรือ fish
  • ตราบใดที่คุณยึดติดกับคุณสมบัติเฉพาะของ sh เท่านั้นคุณก็สามารถใช้ได้ #! / bin / ดวลจุดโทษ และสคริปต์ควรทำงานได้ดีไม่ว่าจะเป็นเชลล์ใดก็ตาม
  • หากคุณเริ่มใช้คุณลักษณะเฉพาะ bash (เช่นอาร์เรย์) คุณควรขอ bash เป็นพิเศษเพราะแม้ว่า / bin / sh เรียกใช้ bash ในระบบของคุณอยู่แล้วซึ่งอาจไม่ได้อยู่ในระบบของคนอื่นและสคริปต์ของคุณจะไม่ทำงานที่นั่น เช่นเดียวกับ zsh และ ksh แน่นอน
  • แม้ว่าสคริปต์จะใช้สำหรับการใช้งานส่วนบุคคลเท่านั้นคุณอาจสังเกตเห็นว่าระบบปฏิบัติการบางระบบเปลี่ยนแปลงไป / bin / sh ระหว่างการอัพเกรด ตัวอย่างเช่นบน Debian เคยเป็น bash แต่ต่อมาถูกแทนที่ด้วยเส้นประที่น้อยที่สุด สคริปต์ที่ใช้ bashisms แต่มีไฟล์ #! / bin / ดวลจุดโทษ จู่ๆก็แตก

อย่างไรก็ตาม:

  • แม้ #! / bin / ทุบตี ไม่ถูกต้อง ในระบบที่แตกต่างกัน bash อาจอยู่ใน / usr / bin, / usr / pkg / bin, หรือ / usr / local / bin.
  • ตัวเลือกที่น่าเชื่อถือกว่าคือ #! / usr / bin / env bashซึ่งใช้ $ PATH. แม้ว่าเครื่องมือ env จะไม่ได้รับการรับรองอย่างเคร่งครัดเช่นกัน / usr / bin / env ยังคงใช้งานได้กับระบบต่างๆมากกว่า / bin / bash ทำ.

มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่? ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่

เครดิตรูปภาพ: Wikipedia