Fish如何防止递归函数调用

问题描述

当使用具有相同名称函数覆盖认二进制文件时,如何防止对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