Intereting Posts
ssh-agent не работает должным образом Kali Linux Rolling Alfa NHA Wireless Ошибка -22, Кали в виртуальной коробке (хост Кали) Режим реального времени Как выбрать системный идентификатор пользователя для пользовательских пакетов (RedHat & compatible)? сценарий оболочки для перемещения выбранных файлов из одного каталога в другой Захват timestamped событий мыши X и рендеринг видео с пользовательским указателем мыши? Не удалось выполнить проверку IPv6 шлюза по умолчанию на OpenSuse 13.2 OS X: Может ли `ls` показывать сломанные символические ссылки? Маршрутизация трафика для конкретного пользователя для конкретного интерфейса Как сделать раздел, который отделен от ОС? Что означает эта запись UFW? Выбор строк в файле CSV на основе значения столбца, содержащего встроенную запятую grep, как подавить отображение несогласованного файла? Компиляция PHP и установка его в одном каталоге Установка Virtual Python, не позволяющая ez_setup? Копирование слов из строк и добавление к строкам в другом файле

Задание zsh для ssh сбивает имена хостов с локальными файлами

предположим, что у меня есть следующая запись в моем /etc/hosts

 192.168.1.10 server1.mydomain.com 

и у меня есть каталог SERVER-FILES в текущем каталоге. Я хочу где SERVER-FILES то scp каталог SERVER-FILES . Я печатаю SE и использую autocompletion для завершения имени каталога:

 $ scp -rp SE<TAB> 

Это завершение должно быть абсолютно недвусмысленным. Но zsh autocomplletion пытается быть слишком умным и обрабатывает имена хостов без учета регистра и, таким образом, пытается сопоставить SE с именами хостов:

 $ scp -rp SE<TAB> SERVER-FILES/ server1.mydomain.com 

Как отключить эту раздражающую функцию, где zsh пытается совместить имена хостов без учета регистра, и поэтому завершает SE<TAB> to server1.mydomain.com`?

Я изменил следующую строку в файле завершения ssh Unix/_ssh :

 - compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts + compadd "$@" $config_hosts 

но это не помогло.

Я считаю, что вы редактируете неправильную строку.

AFAIK config_hosts в Unix / _ssh ссылается на записи хоста в ~. / Ssh / config , а не / etc / hosts .

Правила завершения для / etc / hosts определены немного раньше, в следующем блоке:

 # If users-hosts matches, we shouldn't complete anything else. if [[ "$IPREFIX" == *@ ]]; then _combination -s '[:@]' my-accounts users-hosts "users=${IPREFIX/@}" hosts "$@" && return else _combination -s '[:@]' my-accounts users-hosts \ ${opt_args[-l]:+"users=${opt_args[-l]:q}"} hosts "$@" && return fi 

но это, в свою очередь, просто повторяет стиль хостов, определенный в Unix / _hosts

Поэтому, если вы редактируете определение compadd в конце файла Unix / _hosts следующим образом:

 #_wanted hosts expl host \ # compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' -a "$@" - _hosts _wanted hosts expl host \ compadd -a "$@" - _hosts 

вы должны получить нужное поведение.

PS

Обратите внимание, что редактирование общесистемных файлов завершения обычно не очень хорошая практика, поэтому вы можете просто переопределить хосты в своей локальной конфигурации ZSH, например, добавив такую ​​функцию к вашему ~. / Zsh:

 _hosts() { compadd $(getent hosts | tr -s ' ' '\t' | cut -f2) }