¿POSIX garantiza que las utilidades estándar están en PATH?


11

En la sección "Búsqueda y ejecución de comandos" , la especificación POSIX dice que PATHse busca cuando se encuentra una utilidad para ejecutar (con algunas excepciones). ¿La especificación menciona en PATHalgún lugar que se inicializará a un valor que garantice que se encontrarán todas las utilidades estándar?

¿O necesito hacer algo como lo siguiente para garantizar que nunca recibiré un error de "comando no encontrado" al intentar ejecutar una utilidad estándar?

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

(vea la especificación POSIX de la commandutilidad )

Respuestas:


13

Si y no. En un entorno POSIX, las utilidades deben comportarse como se describe en la especificación. En la práctica, esto significa que las versiones conformes de las utilidades deben estar presentes en $PATH. Sin embargo, al ejecutar su programa en un sistema compatible con POSIX, es posible que lo esté ejecutando en un entorno no conforme. En la práctica, lo que sucede a menudo es que el sistema operativo tiene un modo heredado y un modo POSIX, y está en el modo heredado de manera predeterminada. Peor que perder algunos comandos, el modo heredado tiende a tener incompatibilidades en ellos, como opciones con diferentes significados.

Puedes recuperar un bien PATHcon getconf. Por supuesto, es complicado, ya que getconfen el original $PATHpuede no ser el correcto. El uso de la aplicación para el comando muestra una forma de hacerlo:

command -p getconf PATH

Hasta donde yo entiendo la especificación, esto no es necesario si está ejecutando su programa en un entorno compatible con POSIX; y si no está ejecutando su programa en un entorno compatible con POSIX, POSIX no se aplica. Sin embargo, el uso de esta aplicación se puede tomar como una recomendación: si esto no funciona, puede sentirse autorizado para quejarse con su proveedor de que, independientemente de lo que estén haciendo con respecto a la letra de la especificación POSIX, no están cumpliendo con su espíritu.


Je, ni siquiera me di cuenta de eso getconf PATHen la sección de uso de la aplicación. ¡Gracias!
Richard Hansen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.