Tidak, itu tidak, terutama karena itu tidak mengharuskan sistem untuk menyesuaikan secara default , atau hanya mematuhi standar POSIX (dengan mengesampingkan standar lain).
Misalnya, Solaris (sistem yang memenuhi syarat sertifikasi) memilih kompatibilitas ke belakang untuk utilitasnya /bin
, yang menjelaskan mengapa mereka berperilaku misterius, dan menyediakan utilitas yang sesuai dengan POSIX di lokasi yang berbeda ( /usr/xpg4/bin
, /usr/xpg6/bin
... untuk versi XPG yang berbeda (sekarang digabung ke dalam POSIX) standar, yang sebenarnya merupakan bagian dari komponen opsional di Solaris).
Bahkan sh
tidak dijamin masuk /bin
. Pada Solaris, /bin/sh
dulu merupakan Bourne shell (jadi bukan POSIX compliant) hingga Solaris 10, sementara itu sekarang ksh93 di Solaris 11 (masih belum sepenuhnya memenuhi POSIX, tetapi dalam praktiknya lebih dari itu /usr/xpg4/bin/sh
).
Dari C, Anda bisa menggunakan exec*p()
dan menganggap Anda berada dalam lingkungan POSIX (khususnya terkait PATH
variabel lingkungan).
Anda juga bisa mengatur PATH
variabel lingkungan
#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"...);
Atau Anda bisa menentukan pada saat membangun jalur utilitas POSIX yang ingin Anda jalankan (mengingat bahwa pada beberapa sistem seperti yang GNU, Anda memerlukan langkah-langkah lebih lanjut seperti mengatur POSIXLY_CORRECT
variabel untuk memastikan kepatuhan).
Anda juga dapat mencoba hal-hal seperti:
execlp("sh", "sh", "-c", "PATH=`getconf PATH`${PATH+:$PATH};export PATH;"
"unset IFS;shift \"$1\";"
"exec ${1+\"$@\"}", "2", "1", "ps", "-A"...);
Dengan harapan ada sh
di $PATH
dalamnya, seperti Bourne, ada juga di getconf
dalamnya dan itu untuk versi POSIX yang Anda minati.
/bin
, yaitu/bin/ed
harus dapat digunakan jika ed diinstal. Saya tidak dapat menemukannya sekarang, tetapi saya tahu LSB bergantung padanya, dan saya telah berhasil membela laporan bug menggunakan itu sebagai alasan, jadi setidaknya itu benar pada beberapa titik. (Atau itu sesuatu selain POSUX dan saya salah ingat, tetapi sisanya benar.)