Manchmal definiere ich eine Funktion, die eine ausführbare Datei spiegelt und deren Argumente oder Ausgabe optimiert. Die Funktion hat also den gleichen Namen wie die ausführbare Datei, und ich brauche eine Möglichkeit, wie die ausführbare Datei von der Funktion ausgeführt werden kann, ohne die Funktion rekursiv aufzurufen. Zum Beispiel, um die Ausgabe von fossil diff
through automatisch auszuführen 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" "$@" | colordiff | less -R
return
fi
"$EX" "$@"
}
Wenn ich mir sicher wäre, wo sich die ausführbare Datei befindet, könnte ich sie einfach eingeben /usr/bin/fossil
. Bash erkennt, dass /
der Befehl eine ausführbare Datei und keine Funktion ist. Da ich den genauen Standort nicht kenne, muss ich which
das Ergebnis abrufen und überprüfen. Gibt es einen einfacheren Weg?
/
der Befehl eine ausführbare Datei und keine Funktion ist.“ Genau genommen stimmt das nicht. In einer meiner Meinung nach schrecklichen (undokumentierten) Entwurfsentscheidung lässt bash zu, dass Funktionsnamen Schrägstriche enthalten. Die Schrägstriche einfach verursachen/usr/bin/fossil
eine andere sein Zeichenfolge ausfossil
, so, wenn Sie sagen/usr/bin/fossil
, es nicht versuchen , das auszuführenfossil
Funktion.