A volte definisco una funzione che oscura un eseguibile e ne modifica gli argomenti o l'output. Quindi la funzione ha lo stesso nome dell'eseguibile e ho bisogno di un modo per eseguire l'eseguibile dalla funzione senza chiamare la funzione in modo ricorsivo. Ad esempio, per eseguire automaticamente l'output di fossil diff
tramite colordiff
e less -R
Io 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]"
}
Se fossi sicuro della posizione dell'eseguibile, potrei semplicemente digitare /usr/bin/fossil
. Bash riconosce quel /
significa che il comando è un eseguibile, non una funzione. Ma poiché non conosco la posizione esatta, devo ricorrere a chiamare which
e verificando il risultato. C'è un modo più semplice?
Risposta accettata:
Usa il command
shell incorporata:
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.