หากเป็นสคริปต์ให้เรียกสคริปต์เป็น
bash scriptname.sh
ไม่จำเป็นต้องเปลี่ยนลิงค์เลย
สำหรับปฏิบัติการที่คอมไพล์แล้วคุณสามารถไปที่เส้นทาง chroot:
mkdir rootfs
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
cp /bin/bash rootfs/bin/sh
cp yourprogram rootfs/
sudo chroot rootfs sh
จากนั้นเรียกใช้โปรแกรมของคุณหรือ sudo chroot rootfs /yourprogram
อย่างไรก็ตามในทางปฏิบัติไม่มีเหตุผลที่คุณไม่สามารถใช้/bin/bash
เป็น symlink /bin/sh
ได้ ในความเป็นจริงก่อนหน้าเวอร์ชัน 6.10 Ubuntu ใช้/bin/bash
เป็น/bin/sh
และจากนั้นพวกเขาก็เปลี่ยนเนื่องจาก/bin/sh
การติดตั้ง POSIX /bin/sh
ที่รวดเร็วขึ้นและใช้งานได้น้อยลง(นั่นคือมันปฏิบัติตามมาตรฐาน POSIX สำหรับวิธีที่ยูทิลิตี้ระบบปฏิบัติการ Unix และ OS ควรปฏิบัติ ใช้งาน internals ของพวกเขา) และเนื่องจากเหตุผลในการพกพา ฉันขอแนะนำให้อ่านคำตอบของ Gillesและบันทึกทางประวัติศาสตร์/bin/dash
เกี่ยวกับสาเหตุที่เกิดขึ้น สำหรับความเข้ากันได้สคริปต์ที่เขียนขึ้นเพื่อdash
ใช้คุณสมบัติ POSIX จะทำงานด้วยbash
การเป็นเชลล์เริ่มต้นได้อย่างสมบูรณ์แบบ โดยปกติแล้ววิธีอื่น ๆ ที่ทำให้เกิดปัญหา -bash
มีคุณสมบัติที่ไม่ต้องการ/bin/sh
เช่น<<<
ไวยากรณ์หรืออาร์เรย์
นอกจากนี้คำสั่งที่เป็นปัญหาอาจถูกเขียนด้วย RHEL หรือ CentOS ในใจซึ่งใช้/bin/bash
เป็นลิงก์เพื่อ/bin/sh
แนะนำสองสิ่ง: พวกเขาอาจกำหนดเป้าหมายระบบปฏิบัติการเฉพาะและไม่ปฏิบัติตามหลักการ POSIX ในกรณีเช่นนี้คุณควรตรวจสอบสิ่งอื่น ๆ ที่คำสั่งต้องการเนื่องจากถ้ามันเขียนด้วยระบบปฏิบัติการอื่นในใจคุณอาจพบปัญหามากกว่าการเชื่อมโยง/bin/sh
ใหม่