Используйте функцию из ранее в пути к функциям

В 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,

Другие вопросы по тегам