问题描述
有时,当我在终端上键入命令时,即使我的命令没有错误,终端的自动完成功能也不起作用。
例如,看看这个: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
两次以查看可能性。
示例:li
和 tab
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