当前位置: 首页>>技术教程>>正文


bash – 为什么终端自动完成有时不会对 `services` 命令提出任何建议?

, ,

问题描述

有时,当我在终端上键入命令时,即使我的命令没有错误,终端的自动完成功能也不起作用。

例如,看看这个:sudo service vsftpd status sudo 和服务没有任何问题。我的意思是,当您输入 sud + tab 终端时,建议您 sudo 或我输入 servi + tab 终端完成该服务。但对于 vsftpd 我没有得到任何建议。有没有办法说“终端,请告诉我任何建议!!?”。

最佳思路

auto-completion 的工作程度取决于 bash-completion 包中的 shell 脚本的工作效果。

在 Ubuntu 14.04 中,处理 service 完成的脚本位于 /usr/share/bash-completion/bash_completion 中。它在 /etc/rc.d/init.d/etc/init.d 以及 systemctl list-units --full --all 的输出中查找文件形式的服务名称。

但是安装 vsftpd 包不会将任何文件放入 /etc/init.d 中,因为它已经被 systemd 化了;它将配置文件放入 /etc/systemd/system/vsftpd.service 中。如果不是 Ubuntu 目前不包含 systemctl 命令,systemctl list-units 会找到该文件。

因此,目前,您不会为 service vsftpd 获得 auto-completions ,但您会为大多数其他服务获得 auto-completions ,因为它们的配置文件位于 /etc/init.d 中。

次佳思路

当有多个可能的建议时,tab不会产生任何建议。使用 tab tab(双选项卡)将生成所有可能建议的列表。

第三种思路

vsftpd 可能有不止 1 个选项。 tab 两次以查看可能性。

示例:litab tab 显示:

libnetcfg          line               lintian-info       lispmtopgm
libreoffice        linguist           linux32            listres
lightdm            link               linux64            
lightdm-session    lintian            linux-boot-prober  

第四种思路

您可以建立自己的!

例如:将 complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)' 放入 bash 中,如果你有 su 并按 tab/tab 它会给你所有用户,是的。参见here

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14455.html,未经允许,请勿转载。