gpt4 book ai didi

bash - 如何使用即时定义的 bash 完成函数?

转载 作者:行者123 更新时间:2023-11-29 09:14:07 25 4
gpt4 key购买 nike

我尝试为别名添加补全:alias m='man' .
所以,我添加了 complete -F _man m到我的.bashrc .

问题是函数_man用于完成,未在 bash session 开始时定义,但在对 $ man 执行第一个选项卡竞争时定义命令。
所以: $ complete -p | grep _man可以什么都不返回,或者返回:

complete -F _man man
complete -F _man apropos
complete -F _man whatis

因此,当我尝试在 $ m 上进行制表符补全时命令,我可以得到:

$ m -bash: completing : function « _man » not found
$ m

我对函数 _aptitude 也有同样的问题和 _apt-get


我想要的是使用我的 .bashrc强制创建功能_man , _aptitude , _apt-get一旦 bash 启动。
也许可以使用 compgen内置。

我的 bash 版本是:
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)

感谢阅读。


编辑:其实类似的问题已经存在并且已经回答:
- bash-completion - completion function defined the first time a command is invoked -

最佳答案

你在你的.bashrc中有:

alias m='man'
complete -F _man m

只需添加:

_completion_loader man

那么你在 $ m 上的补全将工作正常,即使之前没有在 $ man 上执行制表符补全。

_completion_loader 可能未在您的发行版中定义。这是在 Ubuntu 14.04 的 .bashrc 中找到的代码副本:

_completion_loader () 
{
local compfile=./completions;
[[ $BASH_SOURCE == */* ]] && compfile="${BASH_SOURCE%/*}/completions";
compfile+="/${1##*/}";
[[ -f "$compfile" ]] && . "$compfile" &> /dev/null && return 124;
complete -F _minimal "$1" && return 124
}

实际上,为了避免生成两次 _man 函数,您还应该更改行
完成 -F _man m
complete -F _man man m.

关于bash - 如何使用即时定义的 bash 完成函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com