ไม่ไม่ส่วนใหญ่สำหรับเหตุผลที่ไม่ต้องการให้ระบบปฏิบัติตามค่าเริ่มต้นหรือปฏิบัติตามมาตรฐาน POSIX เท่านั้น (ยกเว้นมาตรฐานอื่นใด)
ยกตัวอย่างเช่น Solaris (ได้รับการรับรองระบบตามมาตรฐาน) เลือกกันได้ย้อนหลังค่าสาธารณูปโภคใน/bin
ซึ่งอธิบายว่าทำไมประพฤติเหล่านั้นในรูปแบบที่เป็นความลับและให้สาธารณูปโภค POSIX สอดคล้องในสถานที่แยกต่างหาก ( /usr/xpg4/bin
, /usr/xpg6/bin
... สำหรับรุ่นที่แตกต่างกันของ XPG (ตอนรวม เป็น POSIX) มาตรฐานซึ่งเป็นส่วนหนึ่งขององค์ประกอบเสริมใน Solaris)
แม้จะไม่รับประกันว่าจะอยู่ในsh
/bin
บน Solaris /bin/sh
เคยเป็น Bourne shell (ดังนั้นจึงไม่เข้ากันได้กับ POSIX) จนถึง Solaris 10 ในขณะที่ตอนนี้คือ ksh93 ใน Solaris 11 (ยังไม่เข้ากันได้กับ POSIX อย่างสมบูรณ์ แต่ในทางปฏิบัติมากกว่า/usr/xpg4/bin/sh
)
จาก C คุณสามารถใช้exec*p()
และสมมติว่าคุณอยู่ในสภาพแวดล้อม POSIX (โดยเฉพาะเกี่ยวกับPATH
ตัวแปรสภาพแวดล้อม)
คุณสามารถตั้งค่าPATH
ตัวแปรสภาพแวดล้อมได้
#define _POSIX_C_SOURCE=200809L /* before any #include */
...
confstr(_CS_PATH, buf, sizeof(buf)); /* maybe append the original
* PATH if need be */
setenv("PATH", buf, 1);
exec*p("ps"...);
หรือคุณสามารถกำหนดเวลาสร้างเส้นทางของยูทิลิตี้ POSIX ที่คุณต้องการเรียกใช้ (โดยคำนึงถึงว่าในบางระบบเช่น GNU คุณต้องมีขั้นตอนเพิ่มเติมเช่นการตั้งค่าPOSIXLY_CORRECT
ตัวแปรเพื่อให้แน่ใจว่าสอดคล้อง)
คุณสามารถลองสิ่งต่างๆเช่น:
execlp("sh", "sh", "-c", "PATH=`getconf PATH`${PATH+:$PATH};export PATH;"
"unset IFS;shift \"$1\";"
"exec ${1+\"$@\"}", "2", "1", "ps", "-A"...);
ในความหวังว่ามีที่sh
อยู่ใน$PATH
ว่ามันเป็นบอร์นเหมือนว่ายังมีgetconf
และว่ามันเป็นหนึ่งในรุ่นของ POSIX คุณสนใจกำลังที่
/bin
เช่น/bin/ed
จะต้องใช้งานได้ ถ้าติดตั้ง ed แล้ว ฉันไม่สามารถหาได้ในตอนนี้ แต่ฉันรู้ว่า LSB ขึ้นอยู่กับมันและฉันประสบความสำเร็จในการป้องกันการรายงานข้อบกพร่องโดยใช้เหตุผลนั้นอย่างน้อยก็ต้องเป็นจริงในบางจุด (หรือเป็นสิ่งอื่นที่ไม่ใช่ POSuX และฉันจำเดือนที่เหลือ แต่ส่วนที่เหลือเป็นเรื่องจริง)