โฮมเพจ » ทำอย่างไร » เมื่อใดควรใช้ #! / bin / bash แทนที่จะใช้ #! / bin / sh ใน Shell Script

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

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

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

    คำถาม

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

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

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

    คำตอบ

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

    ในระยะสั้น:

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

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

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

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

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