有时,我定义了一个函数,该函数会遮盖可执行文件并调整其参数或输出。因此,该函数与可执行文件具有相同的名称,并且我需要一种方法,该方法如何从该函数运行该可执行文件而无需递归调用该函数。例如,要自动运行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
功能。