如何在Fedora Linux中安装和启用Bash自动完成功能

时间:2020-01-09 10:40:53  来源:igfitidea点击:

如何在Fedora Linux服务器中安装并启用Bash自动完成功能?

说明:GNU Bourne Again shell(Bash)是Fedora Linux的shell。
它也充当与Bourne shell(sh)兼容的命令语言解释器。

Bash结合了Korn shell(ksh)和C shell csh的有用功能。

Bash可以运行大多数sh脚本而无需修改。

bash-completion是shell函数的集合,这些函数利用了Fedora Linux上bash的可编程完成功能。
该页面显示了如何在Fedora Linux中安装和启用Bash自动完成功能。

如何在Fedora Linux中安装并启用Bash自动完成功能?

您需要使用dnf命令:

$ dnf search bash-completion

要获取信息,只需运行带有info选项的dnf命令:

$ dnf info bash-completion

现在您所要做的就是执行以下dnf命令来安装它:

$ sudo dnf install bash-completion

如何测试Bash的可编程完成

安装程序放置了一个名为/etc/profile.d/bash_completion.sh的脚本。
您可以使用cat命令查看它:

$ cat /etc/profile.d/bash_completion.sh

输出示例:

# Check for interactive bash and that we haven't already been sourced.
if [ -n "${BASH_VERSION-}" -a -n "${PS1-}" -a -z "${BASH_COMPLETION_VERSINFO-}" ]; then
 
    # Check for recent enough version of bash.
    if [ ${BASH_VERSINFO[0]} -gt 4 ] || \
       [ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -ge 1 ]; then
        [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \
            . "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
        if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
            # Source completion code.
            . /usr/share/bash-completion/bash_completion
        fi
    fi
 
fi

该脚本将在您的登录会话或开始新的Shell会话时自动获得调用。
对于当前会话,请使用source命令加载它:

$ source /etc/profile.d/bash_completion.sh

在执行命令以自动完成语法或选项时,按[TAB]键:

sudo dnf i[TAB]

如何编写简单的bash补全

假设您一直想使用ping命令来对三个域名执行ping操作。
因此,在shell提示符下执行以下内容:

complete -W 'google.com theitroad.local theitroad.com' ping

现在执行ping并按[TAB]键以将任何一个域名用于ping命令:

ping [TAB]

让我们编写一个简单的函数:

# simple script for ping command 
# Include all host names from /etc/hosts file too
_ping () {  COMPREPLY=(theitroad.local google.com theitroad.com yahoo.com $(awk '{print }' /etc/hosts | uniq) ); }
complete -F _ping ping

如下运行:

ping [TAB]

如何重用现有的完成

我将在自定义bash shell脚本包装器中重用/usr/share/bash-completion/completions/lxd.lxc(即Fedora中的LXD服务器使用的):

_mylxc () {
    source /usr/share/bash-completion/completions/lxd.lxc && _complete_from_snap
}
# note cbzlxc is my custom made wrapper and is in $HOME/bin/
complete -F _mylxc cbzlxc

现在,如下运行:

cbzlxc [TAB]