実行可能ファイルをシャドウイングし、その引数または出力を微調整する関数を定義することがあります。したがって、関数は実行可能ファイルと同じ名前を持ち、関数を再帰的に呼び出さずに関数から実行可能ファイルを実行する方法が必要です。たとえば、fossil diff
through の出力を自動的に実行するにはcolordiff
、次less -R
を使用します。
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" "$@"
}
実行可能ファイルの場所がわかれば、単にを入力できます/usr/bin/fossil
。Bash /
は、コマンドではなく、実行可能ファイルであることを認識しています。しかし、正確な場所がわからないwhich
ため、結果を呼び出して確認することに頼らなければなりません。もっと簡単な方法はありますか?
/
は、コマンドが関数ではなく実行可能ファイルであることを認識しています」と言います。厳密に言えば、それは真実ではありません。私が恐ろしい(そして文書化されていない)設計上の決定だと信じていることにおいて、bashは関数名にスラッシュを含めることを許可します。スラッシュは、単に原因/usr/bin/fossil
異なるように、文字列からfossil
あなたが言うとき、そう、/usr/bin/fossil
それが実行しようとしないfossil
機能を。