2

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

设置别名的最简单方法似乎是使用command,如下所示:

function ls
    command ls -F $argv
end

在文件ls.fish夹中的文件中~/.config/fish/functions。这是用户定义函数的默认文件夹。此文件夹 和~/.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,而不重写它?理想情况下,解决方案还将使用同名的内置命令,如cd,根据引用的文档,这也是不可能的,但这不是必需的。

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

4

1 回答 1

4

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

functions --copy ls saved_ls
function ls
    saved_ls
end

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

于 2015-06-21T03:56:51.870 回答