Строка темы является неправильной. Проблемой не является закрытый порт, это - порт, который не был связан. SSHd еще не запустился; это - причина, которую Вы не можете подключить к нему.
Если $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
known_hosts файл по умолчанию обычно содержит хешированные записи, которые не может проанализировать bash_completion.
Можно отредактировать ssh_config (/etc/ssh/ssh_config) для установки:
HashKnownHosts no
Затем необходимо будет, вероятно, очистить текущий известный файл hosts:
> ~/.ssh/known_hosts
@
не другие символы в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