Edit # 1
Les "doubles" possibles à ce jour sont pas doublons. Ils testent l'existence de $FILE
dans $PATH
, plutôt que de fournir le chemin complet jusqu'au premier résultat valide; et la première réponse utilise bash commandes de ligne de commande, pas c pur.Déterminer qui se déroulera binaire via execlp à l'avance
Original Question
De toutes les fonctions de la famille exec, il y a quelques-unes qui font $PATH
plutôt que d'exiger des recherches d'un chemin absolu binaire à exécuter.
De man exec
:
Le execlp(), execvp(), et les fonctions execvpe() en double les actions du shell dans la recherche d'un fichier exécutable si spécifié nom de fichier ne contient pas une barre oblique (/). Le fichier est recherché dans la liste des chemins d'accès au répertoire séparés par deux-points, spécifiée dans la variable d'environnement PATH. Si cette variable n'est pas définie, la liste de chemin par défaut correspond au répertoire courant suivi de la liste des répertoires renvoyés par confstr (_CS_PATH). (Ce confstr (3) appel renvoie généralement la valeur "/ bin:/usr/bin".)
est-il un moyen simple et direct, pour tester ce que le premier "chemin complet pour exécuter" sera évaluer à, sans avoir à parcourir manuellement tous les éléments dans la variable d'environnement $PATH
, et en ajoutant le nom binaire à la fin du chemin? Je voudrais utiliser une approche «de facto standard» pour estimer le binaire à exécuter, plutôt que de réécrire une tâche qui a probablement déjà été implémentée plusieurs fois dans le passé.
Je me rends compte que ce ne sera pas une garantie, car quelqu'un pourrait potentiellement invalider cette vérification via un script buggé, des attaques TOCTOU, etc. J'ai juste besoin d'une approximation décente à des fins de test.
Merci.
Possible copie de [C, test d'exécution si l'exécutable existe dans PATH] (http://stackoverflow.com/questions/8035372/c-runtime-test-if-executable-exists-in-path) – kaylum
Pourquoi demander? Quel est le cas d'utilisation réel? S'il vous plaît ** éditez votre question ** pour le motiver. –
@BasileStarynkevitch Je souhaite savoir quel programme sera (probablement) exécuté à l'avance à des fins de test. – DevNull