Manchmal definiere ich eine Funktion, die eine ausführbare Datei verdeckt und ihre Argumente oder Ausgabe optimiert. Die Funktion hat also denselben Namen wie die ausführbare Datei, und ich brauche eine Möglichkeit, die ausführbare Datei von der Funktion aus auszuführen, ohne die Funktion rekursiv aufzurufen. Zum Beispiel, um die Ausgabe von fossil diff
automatisch auszuführen durch colordiff
und less -R
Ich verwende:
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]"
}
Wenn ich sicher wäre, wo sich die ausführbare Datei befindet, könnte ich einfach /usr/bin/fossil
eingeben . Bash erkennt diesen /
bedeutet, dass der Befehl eine ausführbare Datei ist, keine Funktion. Aber da ich den genauen Standort nicht kenne, muss ich auf which
zurückgreifen und Überprüfung des Ergebnisses. Gibt es einen einfacheren Weg?
Akzeptierte Antwort:
Verwenden Sie den command
Shell eingebaut:
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.