* bash :
declare -r __DIR__=$(dirname $(readlink -f "${BASH_SOURCE}"))
* batch :
set __DIR__=%~dp0
Il s'agit de déterminer si une commande, dont le chemin est inconnu à l'avance (sinon il suffit d'un [ -x /bin/truc ]
), est ou non disponible. Son répertoire doit cependant faire partie du PATH.
La solution est d'exécuter la commande which : which va chercher la commande dans les répertoires constituant le PATH. On redirige toutes les sorties (standard + erreur) afin de ne voir ni son résultat ni erreur. Ensuite on teste sa valeur de retour (variable $?) pour savoir si elle a échoué ou non (valeur 0 renvoyée).
Note : certains environnements dotent la commande which d'une option -s pour la rendre silencieuse (qui permettrait de supprimer la redirection vers /dev/null) mais dans un soucis de portabilité, on préférera ne pas s'y remettre
which bidule &>/dev/null if [ $? -eq 0 ]; then # bidule est disponible else # bidule est indisponible fi
which bidule >& /dev/null if ($? == 0) then # bidule est disponible else # bidule est indisponible endif