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/ 中,我不介意它是否有它的想法来自那里。

4

1 回答 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,您可以从 复制_ssh_hosts代码.../functions/Completion/Unix/_ssh

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

于 2014-12-11T23:41:10.877 回答