有时我会定义一个函数来隐藏可执行文件并调整其参数或输出。因此该函数与可执行文件具有相同的名称,我需要一种如何从该函数运行可执行文件而不递归调用该函数的方法。例如,要自动运行的输出fossil diff
通过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" "$@"
}
Run Code Online (Sandbox Code Playgroud)
如果我确定可执行文件的位置,我可以简单地输入/usr/bin/fossil
. Bash 认识到这/
意味着它是一个可执行文件,而不是一个函数。但由于我不知道确切的位置,我不得不求助于调用which
并检查结果。有没有更简单的方法?
如何编写一个函数zsh
来调用与函数本身同名的现有命令?例如,我试过这个来说明我的问题:
function ls
{
ls -l $1 $2 $3
}
Run Code Online (Sandbox Code Playgroud)
当我执行它时,ls *
我得到以下信息:
ls:1: maximum nested function level reached
Run Code Online (Sandbox Code Playgroud)
我认为这是因为该函数被递归调用。我怎样才能避免这种情况?
这是一个粗略的示例,在这种情况下,别名可以完成这项工作,但我有一个更复杂的示例,其中别名不合适,因此我需要编写一个函数。