如何在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]