Tive o mesmo problema (pelo que vale a pena, no OS X 10.11, bash 3.2.57, bash-completion 1.3 via brew). Seguindo esta dica Eu expandi o til no arquivo de conclusão do ssh ( /usr/local/etc/bash_completion.d/ssh
no meu caso, ou /etc/bash_completion.d/ssh
caso contrário) como segue:
_scp_local_files()
{
local IFS=$'\n'
local dirsonly=false
if [ "$1" = -d ]; then
dirsonly=true
shift
fi
cur="${cur/#\~/$HOME}" # <<< Expand tilde
if $dirsonly ; then
COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | \
sed -e "s/$_scp_path_esc/\\&/g" -e '/[^\/]$/d' -e "s/^/$1/") )
else
COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | \
sed -e "s/$_scp_path_esc/\\&/g" -e 's/[*@|=]$//g' \
-e 's/[^\/]$/& /g' -e "s/^/$1/") )
fi
COMPREPLY="${COMPREPLY/#$HOME/~}" # <<< Contract tilde
Eu também achei legal contrair de volta o til no final, manter caminhos bons e curtos (como originalmente digitado).