Blog

03/06/2019

How to install and enable Bash auto completion in Fedora Linux



I am a new Fedora Linux user. How do I install and enable Bash auto completion in Fedora Linux server?

Introduction: The GNU Bourne Again shell (Bash) is a shell for Fedora Linux. It is also act as command language interpreter that is compatible with the Bourne shell (sh). Bash combines useful features from the Korn shell (ksh) and the C shell csh. Bash can run most sh scripts without modification. bash-completion is a collection of shell functions that take advantage of the programmable completion feature of bash on Fedora Linux. This page shows how to install and enable Bash auto completion in Fedora Linux.

How do I install and enable Bash auto completion in Fedora Linux?

You need to use the dnf command:
$ dnf search bash-completion
To get info just run the dnf command with info option:
$ dnf info bash-completion

Now all you have to do is type the following dnf command to install it:
$ sudo dnf install bash-completion

Related: RHEL / CentOS: Install and Activate Bash Autocomplete Feature

How to test programmable completion for Bash

Installer placed a script called /etc/profile.d/bash_completion.sh. You can view it with the cat command:
$ cat /etc/profile.d/bash_completion.sh
Sample outputs:

# 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

# 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

The script will get call automatically from your login session or when you start a fresh shell session. For the current session use the source command to load it:
$ source /etc/profile.d/bash_completion.sh
Press the [TAB] key while typing a command to auto-complete syntax or options:
sudo dnf i[TAB]

How to write simple bash completion

Say you always want to ping three domain names using the ping command. So type the following at the shell prompt:
complete -W 'google.com sxi.io nixcraft.com' ping
Now type ping and press the [TAB] key to use any one of the domain name for ping command:
ping [TAB]

Let us write a simple function:

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

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

Run it as follows:
ping [TAB]

How to reuse existing completions

I am going to reuse /usr/share/bash-completion/completions/lxd.lxc (i.e. used by the LXD server in Fedora) in my custom bash shell script wrapper:

_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

_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

Now run it as follows:
cbzlxc [TAB]

Conclusion

The easiest way to install bash completion software is to use a package manager such as dnf. You just installed the bash-completion package and learned how to create simple function and wrappers. For more info see this page.

(adsbygoogle = window.adsbygoogle || []).push({});

Posted by: SXI ADMIN

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

20/08/2019

Start your Bitcoin Exchange with our Software

Start your Bitcoin Exchange with our Software Setup your white label bitcoin exchange right away. Or create your own cryptocurrency using...
14/08/2019

How to KVM, QEMU start or stop virtual machine from command line (CLI)

KVM or Kernel Based Virtual Machine is a popular virtualization technology. It allows you to run virtual guest machines over a host machine. To start...
14/08/2019

How to Docker backup Saving and restoring your volumes

Running a Docker volume backup First, we spin up a temporary container, and we mount the backup folder and the target Docker volume to this container....