有没有办法让 Bash 中的命令选项名称自动完成?

有没有办法让 Bash 中的命令选项名称自动完成?

我正在使用 Bash 4.4。

[root@192 ~]# bash --version
GNU bash, version 4.4.19(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@192 ~]#

我想知道是否有任何方法可以使选项名称自动完成。例如,如果我输入realpath --re并后跟一个Tab,它会帮助我填写选项名称中缺少的部分,然后我得到realpath --relative-to=

答案1

如果您启用了 bash-completion,那么命令选项已经存在,用于完成命令。您可以在类似的地方看到许多用于此目的的脚本和函数/usr/share/bash-completion。安装的软件包喜欢git将其脚本放入/etc/bash_completion.d/.

仍然可能有一些脚本,例如realpathecho,完成有限。要为长选项添加补全,realpath您应该使用_longopt,这是一个用于生成补全的 bash 函数,您可以使用 来查看它type -a

complete -F _longopt realpath

在执行此操作之前,您必须测试您尝试更改的内容是否已完成,方法是:

complete -p realpath

这可以说no completion specification或现有规则,例如complete -F _minimal realpath.新规则将覆盖它。因此,您不应该盲目地将任何功能(现有的或自定义的)分配给许多命令。命令的完成规则已经存在。

该更改适用于您当前的 shell。要使其永久化,您必须source这样做,例如通过bashrc

相关内容