为自定义脚本编写 zsh 自动补全

3
我写了一个小脚本,从https://wiki.archlinux.org/index.php/full_system_backup_with_rsync运行整个系统rsync,它需要一些命令行选项和系统的主机名作为参数。我想给这个脚本添加像ssh那样的自动补全功能。但是,我不想输入用户名,因为root几乎是唯一可以执行此操作的用户。
理想情况下,我想键入wholesystem.sh fi,然后它会自动填充fileserver.domain.com。
这是我的自定义完成文件。选项确实有效,但是主机填充显然不起作用,我不知道该怎么办。
#compdef wholesystem.sh
typeset -A opt_args
_arguments \
  '-h[help]' \
  '-s[silent]' \
  '-v[verbose]' \
  '-d[dry run]' \
  ':remote system:_user_at_host:'

我可以从~/.ssh/known_hosts中提取它,这对我来说没问题,或者...备份系统将备份保存在~/WholeSystems/host.domain.com/中,如果它从那里获取想法,我也不介意。
1个回答

0

我建议像这样:

#compdef wholesystem.sh

_wholesystem.sh() {
  typeset -A opt_args
  _arguments \
    '-h[help]' \
    '-s[silent]' \
    '-v[verbose]' \
    '-d[dry run]' \
    ':remote system:_wholesystem_hosts'
}

_wholesystem_hosts() {
[...]
}

_wholesystem.sh

_wholesystem_hosts 的内容取决于你所需的主机类型。例如,如果你想要与 ssh 相同的主机,可以从 .../functions/Completion/Unix/_ssh 中复制 _ssh_hosts 代码。

我不知道这是否是一个好方法,但这似乎有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接