В 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
не делает это по умолчанию, должна быть причина, правильно?
Почему это приведет к бесконечному циклу? Файл '~/.config/fish/functions/ls.fish' вызывается * после * файла'/usr/local/share/fish/functions/ls.fish', правильно? Или оба они одновременно вызываются и функции, определенные в предыдущем файле, переопределяют их в последнем файле, но оба вызываются одновременно при запуске команды? – trysis
Это источник только первого 'ls.fish', найденного путем поиска' $ fish_function_path'. Таким образом, тот, что находится в '~/.config', замаскирует его в'/usr/local/share'. Причина, по которой он приводит к бесконечному циклу, заключается в том, что выполнение 'ls.fish' сначала пытается скопировать' ls', что означает автозагрузку 'ls', что означает выполнение' ls.fish' ... –
Получил это, спасибо. Это может быть информация для ввода документов, предполагая, что она еще не существует, и я слепой и не видел ее. – trysis