2014-12-11 104 views
3

我编写了一个小脚本,该脚本从https://wiki.archlinux.org/index.php/full_system_backup_with_rsync运行整个系统rsync,它以几个命令行选项和系统的主机名作为参数。我想给这种类型的自动完成赋予诸如ssh之类的东西。但是,我并不想输入用户,因为root几乎是唯一可以这样做的用户。自定义脚本的zsh完成

理想情况下,我想键入wholesystem.sh网络连接,并有它填补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 /拉,我如果它从那里得到它的想法,不会介意。

回答

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代码。

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