问题描述
当使用具有相同名称的函数覆盖默认二进制文件时,如何防止对fish 函数进行递归函数调用?
例如
# Override 'ls'
function ls
if [ my_special_condition ]
* Do special stuff *
else # Call regular ls
ls $argv
end
end
显然,上面的代码以递归循环结束,而没有调用实际的 'ls' 二进制文件。 有没有办法解决这个问题?
解决方法
在函数内,使用 the command
command
function ls
command ls $argv
end
,
我了解您想要替换 ls
函数,同时还可以调用原始函数。你可以通过 functions -c
:
functions -c ls orig_ls # copies ls to orig_ls
function ls
if [ my_special_condition ]
* Do special stuff *
else # Call original ls
orig_ls $argv
end
end