Используйте функцию из ранее в пути к функциям
В fish
Можно ли ссылаться или использовать функцию внутри другой функции с тем же именем? Например, fish
имеет функцию ls
в /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
не делает этого по умолчанию, должна быть причина, верно?
1 ответ
Обычный трюк - скопировать функцию, которую вы хотите переопределить, а затем вызвать копию из переопределения:
functions --copy ls saved_ls
function ls
saved_ls
end
Вы не можете сделать это в автозагрузке ls.fish
файл, так как это приведет к бесконечному циклу, но вы можете сделать это в config.fish
,