Где функция определяется, когда существует псевдоним с тем же именем - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть функция

sql() { ... }

и псевдоним с тем же именем

alias sql="noglob sql"

Я знаю, что могу использовать type somefunction, чтобы найти определение функции, но в этомна случай, если это не сработает.Единственный способ, который я нашел, - это псевдоним unalias, который не очень практичен.

❯ type sql

sql is an alias for noglob sql

❯ unalias sql ; type sql

sql is a shell function from /home/sparc/bin/zsh_libs/zsh_sql

Ответы [ 3 ]

0 голосов
/ 27 сентября 2019

Нашли решение

❯ echo $functions_source[sql] 
/home/sparc/bin/zsh_libs/zsh_sql

Это не будет работать на всех версиях zsh.Проверьте, существует ли он, прежде чем использовать его с:

(($+functions_source)) && echo works
0 голосов
/ 27 сентября 2019

Просто экранируйте часть имени команды:

% \sql

Расширение псевдонима происходит до удаления кавычки, поэтому \ препятствует успешному совпадению с псевдонимом.Поиск имени функции происходит после удаления цитаты.

% foo () { echo function ;}
% alias foo='echo alias'
% foo
alias
% \foo
function
0 голосов
/ 25 сентября 2019
# only check function definition by option `-f`
type -f sql

-f
Вызывает отображение содержимого функции оболочки , что в противном случае не произошло бы, если бы не использовался флаг -c.

Решение эксклюзивно для ZSH.Возможно, вам придется использовать другую опцию на других оболочках.

...