2014-12-11 89 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代碼。

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