A veces defino una función que sombrea un ejecutable y modifica sus argumentos o salida. Entonces, la función tiene el mismo nombre que el ejecutable, y necesito una forma de ejecutar el ejecutable desde la función sin llamar a la función de forma recursiva. Por ejemplo, para ejecutar automáticamente la salida de fossil diff
a través de colordiff
y less -R
Yo uso:
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 quisiera estar seguro de la ubicación del ejecutable, simplemente podría escribir /usr/bin/fossil
. Bash reconoce que /
significa que el comando es un ejecutable, no una función. Pero como no sé la ubicación exacta, tengo que recurrir a llamar a which
y comprobando el resultado. ¿Existe una forma más sencilla?
Respuesta aceptada:
Usa el command
shell integrado:
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.