Parfois, je définis une fonction qui masque un exécutable et modifie ses arguments ou sa sortie. Ainsi, la fonction porte le même nom que l'exécutable, et j'ai besoin d'un moyen d'exécuter l'exécutable à partir de la fonction sans appeler la fonction de manière récursive. Par exemple, pour exécuter automatiquement la sortie de fossil diff
via colordiff
et less -R
J'utilise :
function fossil () {
local EX=$(which fossil)
if [ -z "$EX" ] ; then
echo "Unable to find 'fossil' executable." >&2
return 1
fi
if [ -t 1 ] && [ "$1" == "diff" ] ; then
"$EX" "[email protected]" | colordiff | less -R
return
fi
"$EX" "[email protected]"
}
Si j'étais sûr de l'emplacement de l'exécutable, je pourrais simplement taper /usr/bin/fossil
. Bash reconnaît que /
signifie que la commande est un exécutable, pas une fonction. Mais comme je ne connais pas l'emplacement exact, je dois recourir à l'appel which
et vérification du résultat. Existe-t-il un moyen plus simple ?
Réponse acceptée :
Utilisez la command
shell intégré :
bash-4.2$ function date() { echo 'at the end of days...'; }
bash-4.2$ date
at the end of days...
bash-4.2$ command date
Mon Jan 21 16:24:33 EET 2013
bash-4.2$ help command
command: command [-pVv] command [arg ...]
Execute a simple command or display information about commands.
Runs COMMAND with ARGS suppressing shell function lookup, or display
information about the specified COMMANDs. Can be used to invoke commands
on disk when a function with the same name exists.