Как я могу исправить этот сценарий заполнения клавишей Tab имени хоста SSH?

Строка темы является неправильной. Проблемой не является закрытый порт, это - порт, который не был связан. SSHd еще не запустился; это - причина, которую Вы не можете подключить к нему.

6
11.06.2013, 19:52
2 ответа

Если $COMP_WORDBREAKS содержит (который является значением по умолчанию в моей системе), затем, серьезные проблемы возникают, который я не мог решить (после того, как нажатие Tab и Enter один было удалено).

Но если Вы удаляете его из той переменной среды затем, это работает:

_foo () {
  if [[ "$COMP_WORDBREAKS" =~ "@" ]]; then
    echo ""
    echo '$COMP_WORDBREAKS contains "@"; aborting'
    COMPREPLY=()
  else
    at_in=no
    if [[ ${COMP_WORDS[COMP_CWORD]} =~ "@" ]]; then
      var="${COMP_WORDS[COMP_CWORD]}"
      tail="${var#*@}"
      prefix="${var%"$tail"}"
    else
      prefix=""
    fi
    COMPREPLY=($(cut -f 1 -d ' ' <~/.ssh/known_hosts |
      sed -e 's/,/\n/g' | uniq |
      awk -v prefix="${prefix}" '/\[/ {next}; {print prefix $0;}'))
    COMPREPLY=($(compgen -W "${COMPREPLY[*]}" "${COMP_WORDS[COMP_CWORD]}"))
  fi
}

complete -F _foo ssh
1
27.01.2020, 20:29
  • 1
    Это - нечетное взаимодействие, но это только относится @ не другие символы в COMP_WORDBREAKS как =. readline специальное предложение также, я подозреваю, что это может быть так, чтобы завершение работало тот же путь с readline (C-x), который сохраняет продвижение если существующий. Обходное решение высокого звука должно проверить если ${COMP_WORDS[COMP_CWORD-1]} содержит только и использование compgen ... -P @ снабжать префиксом его к сгенерированным завершениям. завершение удара работает вокруг этого с"shopt -u hostcomplete"который делает другие внутренние вещи, но также и удаляет из COMP_WORDBREAKS. попытка –  mr.spuratic 22.12.2017, 14:01

known_hosts файл по умолчанию обычно содержит хешированные записи, которые не может проанализировать bash_completion.

Можно отредактировать ssh_config (/etc/ssh/ssh_config) для установки:

HashKnownHosts no

Затем необходимо будет, вероятно, очистить текущий известный файл hosts:

> ~/.ssh/known_hosts
3
27.01.2020, 20:29

Теги

Похожие вопросы