Очень часто мне нужно использовать идентификатор для команды. Например,
ssh server1-name
Очевидно, что если я должен был нажать [tab] при вводе server1, то часть -name идентификатора строки не будет завершена. Есть ли способ в bash, чтобы заставить это работать?
Он явно работает для других идентификаторов, таких как имена каталогов. то есть
cd /var/www/ht[tab] приведет к cd /var/www/html, есть ли причина, по которой он не работает для таких вещей, как ssh?
Элементы в ~/.ssh/known_hosts хэшированы и поэтому не могут быть прочитаны bash-completion, см. эту ошибку и аналогичный вопрос в Unix.SE.
В качестве обходного пути существует эта ошибка (см. также комментарии) для ~/.profile:
_complete_ssh_hosts ()
{
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
comp_ssh_hosts=`cat ~/.ssh/known_hosts | \
cut -f 1 -d ' ' | \
sed -e s/,.*//g | \
grep -v ^# | \
uniq | \
grep -v "\[" ;
cat ~/.ssh/config | \
grep "^Host " | \
awk '{print $2}'
`
COMPREPLY=( $(compgen -W "${comp_ssh_hosts}" -- $cur))
return 0
}
complete -F _complete_ssh_hosts ssh
Другую попытку обойти эту проблему можно найти здесь здесь :
]_ssh()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* | grep -v '[?*]' | cut -d ' ' -f 2-)
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
К сожалению, я не могу проверить это прямо сейчас, но вы можете просто попробовать их обоих. Второй выглядит намного проще для меня, я ожидаю, что он будет работать быстрее.
Элементы в ~/.ssh/known_hosts хэшированы и поэтому не могут быть прочитаны bash-completion, см. эту ошибку и аналогичный вопрос в Unix.SE.
В качестве обходного пути существует эта ошибка (см. также комментарии) для ~/.profile:
_complete_ssh_hosts ()
{
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
comp_ssh_hosts=`cat ~/.ssh/known_hosts | \
cut -f 1 -d ' ' | \
sed -e s/,.*//g | \
grep -v ^# | \
uniq | \
grep -v "\[" ;
cat ~/.ssh/config | \
grep "^Host " | \
awk '{print $2}'
`
COMPREPLY=( $(compgen -W "${comp_ssh_hosts}" -- $cur))
return 0
}
complete -F _complete_ssh_hosts ssh
Другую попытку обойти эту проблему можно найти здесь здесь :
]_ssh()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* | grep -v '[?*]' | cut -d ' ' -f 2-)
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
К сожалению, я не могу проверить это прямо сейчас, но вы можете просто попробовать их обоих. Второй выглядит намного проще для меня, я ожидаю, что он будет работать быстрее.
Элементы в ~/.ssh/known_hosts хэшированы и поэтому не могут быть прочитаны bash-completion, см. эту ошибку и аналогичный вопрос в Unix.SE.
В качестве обходного пути существует эта ошибка (см. также комментарии) для ~/.profile:
_complete_ssh_hosts ()
{
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
comp_ssh_hosts=`cat ~/.ssh/known_hosts | \
cut -f 1 -d ' ' | \
sed -e s/,.*//g | \
grep -v ^# | \
uniq | \
grep -v "\[" ;
cat ~/.ssh/config | \
grep "^Host " | \
awk '{print $2}'
`
COMPREPLY=( $(compgen -W "${comp_ssh_hosts}" -- $cur))
return 0
}
complete -F _complete_ssh_hosts ssh
Другую попытку обойти эту проблему можно найти здесь здесь :
]_ssh()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* | grep -v '[?*]' | cut -d ' ' -f 2-)
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
К сожалению, я не могу проверить это прямо сейчас, но вы можете просто попробовать их обоих. Второй выглядит намного проще для меня, я ожидаю, что он будет работать быстрее.