在函数路径中使用较早的函数
Posted
技术标签:
【中文标题】在函数路径中使用较早的函数【英文标题】:Use Function From Earlier in Function Path 【发布时间】:2015-09-06 18:12:21 【问题描述】:在fish
中,是否可以在另一个同名函数中引用或使用一个函数?例如,fish
在/usr/local/share/functions/ls.fish
上有一个函数ls
,它根据操作系统和外壳是否有颜色等设置一些默认参数。我想定义另一个函数,它会为我设置一些默认颜色,而不会破坏这个其他函数,以防我想使用更新版本的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
中定义的别名/函数来覆盖别名/函数,而不重写编写它?理想情况下,解决方案也将使用内置命令同名,如cd
,根据引用的文档,这也是不可能的,但这不是必需的。
最后,这是个好主意吗?如果fish
默认不这样做,那肯定是有原因的吧?
【问题讨论】:
【参考方案1】:通常的技巧是复制要覆盖的函数,然后从覆盖中调用副本:
functions --copy ls saved_ls
function ls
saved_ls
end
您不能在自动加载的 ls.fish
文件中执行此操作,因为它会导致无限循环,但您可以在 config.fish
中执行此操作。
【讨论】:
为什么会导致无限循环?~/.config/fish/functions/ls.fish
文件是在 /usr/local/share/fish/functions/ls.fish
文件之后调用的,对吗?还是它们同时被调用,并且前一个文件中定义的函数覆盖后一个文件中的函数,但是在运行命令时它们同时被调用?
它只获取通过搜索$fish_function_path
找到的第一个ls.fish
。所以~/.config
中的那个会掩盖/usr/local/share
中的那个。导致死循环的原因是执行ls.fish
首先尝试复制ls
,即自动加载ls
,即执行ls.fish
...
知道了,谢谢。这可能是要放入文档中的信息,假设它不存在并且我是盲人并且没有看到它。以上是关于在函数路径中使用较早的函数的主要内容,如果未能解决你的问题,请参考以下文章