หลีกเลี่ยง“ BASH-isms” ในเชลล์สคริปต์


37

มีเครื่องมือที่คล้ายกับPerl :: Critic หรือไม่ที่จะตรวจสอบเชลล์สคริปต์ของคุณและชี้ให้เห็นข้อบกพร่องปัญหาเกี่ยวกับการพกพาการใช้งานโปรแกรมที่ไม่ได้มาตรฐานโดยไม่มีข้อผิดพลาด

ฉันรู้ว่าset -o posixจะปิดใช้งานการใช้งานที่ไม่ใช่ POSIX แต่จะไม่บอกสิ่งที่ฉันต้องการทราบเช่นอาร์เรย์เชลล์ดัชนี zsh เริ่มต้นที่ 1 และทุบตีจาก 0 และเถ้าไม่สนับสนุนอาร์เรย์เลย

คำตอบ:


36

มีcheckbashisms ใน Debian ก็ส่งเป็นส่วนหนึ่งของเครื่องมือแพคเกจดูแล

ทดสอบสคริปต์ของคุณภายใต้เส้นประและหรู ทั้งคู่มีโครงสร้างที่ไม่ใช่ POSIX ไม่กี่ตัว แต่ถ้าสคริปต์ของคุณทำงานได้ทั้งคู่ก็มีโอกาสที่จะทำงานได้ในหลาย ๆ ที่ (ด้วยข้อแม้ว่ามันยากที่จะทดสอบเชลล์สคริปต์ทั่วไปเนื่องจากพวกเขามักจะมีมุมกรณีจำนวนมาก)

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

โปรดทราบว่าการไม่พกพาไม่ได้มาจากเชลล์เพียงอย่างเดียว แต่ยังมาจากยูทิลิตี้ภายนอก OpenBSD และ Solaris มีแนวโน้มที่จะมียูทิลิตี้ที่มีคุณสมบัติ POSIX และไม่มากดังนั้นมันจึงเป็นสิ่งที่ดีสำหรับการทดสอบการพกพา

คุณจะต้องการอ้างถึงข้อมูลจำเพาะ POSIXและแหล่งข้อมูลอื่น ๆ ที่กล่าวถึงในหัวข้อนี้ (โดยเฉพาะคู่มือการใช้งาน autoconf ); แต่นั่นคือเอกสารมันไม่ช่วยถ้าคุณใช้คุณสมบัติโดยไม่ตั้งใจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.