POSIX รับประกันว่าสาธารณูปโภคมาตรฐานอยู่ใน PATH หรือไม่?


11

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

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

PATH=$(command -p sh -c 'printf %s "${PATH}"')

(ดูข้อกำหนด POSIX ของcommandยูทิลิตี้ )

คำตอบ:


13

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

คุณสามารถดึงข้อมูลที่ดีด้วยPATH getconfแน่นอนว่ามันเป็นเรื่องยากเนื่องจากgetconfในต้นฉบับ$PATHอาจไม่ถูกต้อง คำสั่ง Application Usage สำหรับแสดงวิธีการ:

command -p getconf PATH

เท่าที่ฉันเข้าใจคุณสมบัตินี้ไม่จำเป็นถ้าคุณใช้โปรแกรมของคุณในสภาพแวดล้อมที่สอดคล้องกับ POSIX; และหากคุณไม่ได้ใช้โปรแกรมในสภาพแวดล้อมที่สอดคล้องกับ POSIX POSIX จะไม่นำมาใช้ อย่างไรก็ตามการใช้แอปพลิเคชันนี้สามารถนำไปใช้เป็นคำแนะนำ: หากสิ่งนี้ไม่ได้ผลคุณสามารถรู้สึกมีสิทธิ์ที่จะบ่นกับผู้ขายของคุณว่าสิ่งที่พวกเขากำลังทำเกี่ยวกับตัวอักษรของ POSIX spec พวกเขาจะไม่ปฏิบัติตามจิตวิญญาณ


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