![如何为没有 Bash 自动完成功能的 snap 应用添加此功能(例如:canonical-livepatch)](https://linux22.com/image/945727/%E5%A6%82%E4%BD%95%E4%B8%BA%E6%B2%A1%E6%9C%89%20Bash%20%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90%E5%8A%9F%E8%83%BD%E7%9A%84%20snap%20%E5%BA%94%E7%94%A8%E6%B7%BB%E5%8A%A0%E6%AD%A4%E5%8A%9F%E8%83%BD%EF%BC%88%E4%BE%8B%E5%A6%82%EF%BC%9Acanonical-livepatch%EF%BC%89.png)
snapcanonical-livepatch
没有自动完成子命令的功能。根据帮助页面,有效的子命令是:
$ canonical-livepatch help
...
COMMANDS:
config - configure livepatching on the machine
disable - disable livepatching on the machine
enable - enable livepatching on the machine
help - display help
kernel-upgrade-required - indicate whether a kernel upgrade is required
refresh - immediately download and apply any available livepatch
status - show kernel's livepatch status
有没有一种简单的方法可以为 Bash 中的 snap 中的子命令添加自动完成功能canonical-livepatch
,而无需修改 snap 本身?
livepatch
一个小细节是,自动完成功能也应该适用于我为该命令所用的snap 别名。
$ snap aliases
Command Alias Notes
canonical-livepatch livepatch manual
lxd.lxc lxc -
答案1
这可以通过创建以下自动完成脚本(我称之为livepatch-completion
)来实现:
# canonical-livepatch completion script
_livepatch_completion()
{
# Only autocomplete for first subcommand
if [ "${#COMP_WORDS[@]}" != "2" ]; then
return
fi
# Define the list of words that will autocomplete and display on double-tab
COMPREPLY=($(compgen -W "config disable enable help kernel-upgrade-required refresh status" "${COMP_WORDS[1]}"))
}
# Initialize the completion function for both the original command and the alias livepatch
complete -F _livepatch_completion canonical-livepatch livepatch
将脚本放置在您喜欢的任何位置(例如~/.bash_completion
)。
~/.bashrc
通过将此行添加到您的(或启动终端时来源的任何其他文件)来获取自动完成脚本:
source ~/.bash_completion/livepatch-completion
这可能不是最先进的解决方案,但它可以简单地自动完成任何其他命令的子命令,包括快照和别名。