首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash_completion找不到函数

bash_completion找不到函数
EN

Server Fault用户
提问于 2019-09-14 06:54:07
回答 1查看 299关注 0票数 1

我编写了一个程序(logit),用于在命令行中设置日志记录和执行程序。一切都很好。

我希望能够完成命令,sudo就像logit一样工作,所以由于懒惰,我在我的.bashrc中这样做:

complete -F _sudo logit

当它工作,它做我需要的,但我不能使用完成的logit,直到我使用它的sudo。

代码语言:javascript
复制
wwalker@polonium:~$ type _sudo
-bash: type: _sudo: not found                                                 
wwalker@polonium:~$ logit cal-bash: completion: function `_sudo' not found
wwalker@polonium:~$ logit cal-bash: completion: function `_sudo' not found
wwalker@polonium:~$ sudo cal                                                  
cal                 caller              callgrind_annotate  callgrind_control    
wwalker@polonium:~$ type _sudo                                                
_sudo is a function            
_sudo ()           
{          
....
wwalker@polonium:~$ logit cal
cal                 caller              callgrind_annotate  callgrind_control   
wwalker@polonium:~$ logit cal

有人知道_sudo是怎么神奇地出现的吗?

谢谢韦恩

编辑:当我尝试自动完成sudo命令时,我发现某些东西会触发/usr/share/bash-completion/completions/sudo的延迟加载。在执行自动完成时,查看set -x,我看到它调用__load_completion sudo

因此,我有一个解决办法,我把它放在了我的.bashrc中:

代码语言:javascript
复制
__load_completion sudo
complete -F _sudo logit

编辑2:

代码语言:javascript
复制
wwalker@polonium:~$ ls -li /usr/share/bash-completion/completions/sudo*
3017247 -rw-r--r-- 1 root root 1306 2017-09-22 00:25:24.000 /usr/share/bash-completion/completions/sudo
3017249 lrwxrwxrwx 1 root root    4 2019-01-31 08:28:33.000 /usr/share/bash-completion/completions/sudoedit -> sudo

所以为了欺骗我要做的事,我可以这样做:

代码语言:javascript
复制
ln -s /usr/share/bash-completion/completions/sudo /home/wwalker/.local/share/bash-completion/completions/logit

并将最后一行编辑为:

代码语言:javascript
复制
complete -F _sudo sudo sudoedit logit
EN

回答 1

Server Fault用户

发布于 2019-09-14 08:05:21

我试图找到一个懒惰的解决方案就是问题所在。当我用需要的细节做一个很好的问题时,我发现了我的错误.

正确的方法是:

代码语言:javascript
复制
cp /usr/share/bash-completion/completions/sudo /home/wwalker/.local/share/bash-completion/completions/logit

然后编辑新的logit文件并使其自定义为我的程序。几乎将函数名和其他引用从sudo更改为logit。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/984207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档