Мне не известен метод easy , позволяющий завершить выполнение пользовательской команды. Предполагая, что у вас есть команда foo
с кучей допустимых аргументов bar
, bas
или baz
, тогда завершение легко: вы можете иметь либо foo bar
, foo bas
или foo baz
. Если они не or
, вы могли бы иметь любую комбинацию из трех.
Несколько хуже становится, когда у вас есть «глубина» больше 1 (например, bar
может принимать аргументы car
, cas
и caz
).
В zsh
мое общее понимание состоит в том, что завершение команд подробно описано в completion functions
. Эти функции специфичны для приложения , поскольку аргументы для каждого приложения специфичны для этих приложений. Например, tmux
(терминальный мультиплексор, похожий на screen
, если вы не знакомы) имеет довольно сложную функцию завершения: вот ссылка .
Если вы хотите написать свои собственные функции завершения, документация доступна и доступна. Вот несколько ссылок, по которым я (медленно) прорабатываю свой путь - они определенно скажут вам, как получить завершение работы, но есть много чтения. Z-Shell - сложный зверь.
Вы особенно заинтересованы в том, чтобы включить завершение для аргументов, подобных имени хоста, и вы выделили ssh
в качестве идеи. Функция завершения zsh
для ssh
определена в Completion/Unix/Command/_ssh
, если у вас есть источник ZSH. Если нет, вот ссылка .
Конечно, этот вопрос довольно похож. Один compdef
может делать то, что вы хотите, если параметры myscript
и ssh
достаточно идентичны.