POSIX garantit-il que les utilitaires standard sont dans PATH?

11

Dans la section "Recherche et exécution de commandes" , la spécification POSIX indique que la PATHrecherche est effectuée lors de la recherche d'un utilitaire à exécuter (à quelques exceptions près). La spécification mentionne-t-elle un endroit qui PATHsera initialisé à une valeur qui garantit que tous les utilitaires standard seront trouvés?

Ou dois-je faire quelque chose comme ce qui suit pour garantir que je n'obtiendrai jamais d'erreur "commande introuvable" lorsque j'essaie d'exécuter un utilitaire standard?

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

(voir la spécification POSIX de l' commandutilitaire )

Richard Hansen
la source

Réponses:

13

Oui et non. Dans un environnement POSIX, les utilitaires doivent se comporter comme décrit par la spécification. En pratique, cela signifie que des versions conformes des utilitaires doivent être présentes dans $PATH. Cependant, lorsque vous exécutez votre programme sur un système compatible POSIX, vous pouvez l'exécuter dans un environnement non conforme. Dans la pratique, ce qui se produit souvent, c'est que le système d'exploitation a un mode hérité et un mode POSIX, et est en mode hérité par défaut. Pire que de manquer certaines commandes, le mode hérité a tendance à avoir des incompatibilités, telles que des options avec des significations différentes.

Vous pouvez récupérer un bien PATHavec getconf. Bien sûr, c'est délicat, car getconfl'original $PATHn'est peut-être pas le bon. La commande Application Usage for montre une façon de procéder:

command -p getconf PATH

Pour autant que je comprends la spécification, ce n'est pas nécessaire si vous exécutez votre programme dans un environnement conforme à POSIX; et si vous n'exécutez pas votre programme dans un environnement conforme à POSIX, POSIX ne s'applique pas. Cependant, cette utilisation de l'application peut être considérée comme une recommandation: si cela ne fonctionne pas, vous pouvez vous sentir en droit de vous plaindre à votre fournisseur que quoi qu'il fasse concernant la lettre de la spécification POSIX, il ne respecte pas son esprit.

Gilles 'SO- arrête d'être méchant'
la source
Hé, je n'ai même pas remarqué cela getconf PATHdans la section d'utilisation de l'application. Merci!
Richard Hansen