使用函数路径中较早的函数

Use Function From Earlier in Function Path

fish中,是否可以在另一个同名函数中引用或使用一个函数?例如,fish/usr/local/share/functions/ls.fish 有一个函数 ls,它根据 OS 和 shell 是否有颜色设置一些默认参数。我想定义另一个函数,它将为我设置一些默认颜色,而不会破坏这个其他函数,以防我想使用更新版本的 fish.

设置别名最简单的方法似乎是使用 command,像这样:

function ls
    command ls -F $argv
end

文件夹~/.config/fish/functions中的文件ls.fish。这是用户定义函数的默认文件夹。此文件夹和 ~/.config/fish/functions 都在 $fish_function_path 中,但 ~/.config/fish/functions 稍后出现,因此用户可以设置自己的功能来覆盖 fish 的默认功能。但是,正如 fish 文档所说,

command forces the shell to execute the program COMMANDNAME and ignore
any functions or builtins with the same name.

如何用稍后在 $fish_function_path 中定义的 alias/function 覆盖一个 alias/function,而不会覆盖 写入 理想情况下,解决方案也将使用同名的内置命令,如 cd,根据引用的文档,这也是不可能的,但这不是必需的。

最后,这是个好主意吗?如果fish默认不这样做,那一定是有原因的,对吧?

通常的技巧是复制要覆盖的函数,然后从覆盖内调用副本:

functions --copy ls saved_ls
function ls
    saved_ls
end

您不能在自动加载的 ls.fish 文件中执行此操作,因为它会导致无限循环,但您可以在 config.fish.

中执行此操作