Bonjour,
Ne surtout pas faire ce que dit Christv31 (qui semble se prendre pour un Dieu de l'informatique, mais plus dans le style du reportage du même nom de "strip tease" pour ceux qui connaissent ^_^)
Voici les raisons pour lesquelles il ne faut pas choisir sa "méthode", même si Sebastien dans son message original donne déjà la réponse :
- Si la commande n'existe pas, le système va générer un message d'erreur. Il est peut être possible de "catcher" cette erreur mais ce n'est pas du tout la bonne manière de tester. Pour faire une analogie parlante, c'est comme si on voulait savoir si une voiture était équipé de frein, et que pour se faire, on la lance à toute vitesse contre un mur et on essaie de freiner 100m avant... Pas top comme test ^_^
- Sinon (la commande existe bien) : elle va être exécutée ! Imaginons que l'on veut savoir si la commande "gnome-open" existe. Soit on fait le test sans argument et ça affiche la ligne "Usage" de la commande (même analogie que tout à l'heure, sauf que les freins sont installés mais vous vous trompez de pédalle), soit ça va l'exécuter et lancer le programme associé au fichier passé en paramêtre... Pas top non plus... Surtout si la commande éteind le PC, efface les fichiers ou autre...
La solution donnée par jipicy fonctionne très bien. exemples :
> which gnome-open
/usr/bin/gnome-open
>which windows
windows: aliased to xvnc4viewer 192.168.1.23:5900
> which rm
rm: aliased to rm -i
>which which
which: shell built-in command
> which commandeInexistante
commandeInexistante not found
Donc il suffit de récupérer le retour de cette commande (dans une variable, dans un fichier etc.)
- Si la réponse commence par "/" c'est que which renvoit la localisation de l'executable de la commande. Il suffit de tester si on a les droits d'execution dessus avec :
test -x /chemin/vers/la/commande
- Si la réponse est équivalente à "#nomdelacommande#: shell built-in command" (exemple : "cd:", "wich:", "exit:" etc.) c'est qu'il s'agit d'une commande directement implémentée par le shell utilisé, donc qui est forcément executable.
- Si la réponse commence par : "#nomdelacommande#: aliased to", il faut la parser pour récupérer ce qui est entre "to " et le prochain espace. Donc pour la réponse "windows: aliased to xvnc4viewer 192.168.1.23:5900", on va récupérer "xvnc4viewer" et on va refaire un which dessus et retraiter ce résultat tant qu'on a ce type de résultat. Ca va donner :
>which xvnc4viewer
/usr/bin/xvnc4viewer
- Sinon : j'ai pas trouvé d'autre cas. N'hésitez pas à compléter :)
Et si quelqu'un a une autre solution, qu'il n'hésite pas à la poster ici afin d'éviter d'avoir des énormités comme celles de Christv31. (et si ce que je viens d'écrire en est une aussi, hésitez encore moins à me corriger !)
* la Mort est un réel manque de savoir vivre *
( Linux² + Apache) * ( MySQL x 2 + PHP² ) * = (Power + Quickness) / some bad code