如何为没有 Bash 自动完成功能的 snap 应用添加此功能(例如:canonical-livepatch)

如何为没有 Bash 自动完成功能的 snap 应用添加此功能(例如:canonical-livepatch)

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

这可能不是最先进的解决方案,但它可以简单地自动完成任何其他命令的子命令,包括快照和别名。

相关内容