2014-12-11 4 views
3

Я написал небольшой скрипт, который запускает всю систему rsync от https://wiki.archlinux.org/index.php/full_system_backup_with_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, вы можете скопировать код _ssh_hosts с .../functions/Completion/Unix/_ssh.

Я не знаю, является ли это хорошим способом, но это, похоже, работает.

Смежные вопросы