Como ativar o autocompletion local para o scp?

3

Tarde demais: a máquina, o SO e a configuração em questão não estão mais em uso, por isso não posso confirmar mais sugestões. Eu não encontrei este problema no Fedora ou Arch Linux. Se você estiver com esse problema, poste outra pergunta com os detalhes da sua configuração.

Sempre que eu quiser copiar um arquivo do meu diretório pessoal, me deparo com esse problema: scp não completará automaticamente os caminhos precedidos por ~ (til). Isso é muito simples de verificar digitando scp ~/ e pressionando Tab duas vezes - Nenhuma conclusão de arquivo é mostrada. Mesmo se eu especificar um prefixo de caminho exclusivo como scp ~/.bash_hist , ele não será concluído. Isso é por design, configurável ou um bug?

Para esclarecer, todas as outras partes do trabalho de conclusão: nomes de host e caminhos em hosts remotos concluem muito bem. Conclusões de caminhos com til também funcionam com outros comandos, como ls .

Poderia haver alguma restrição ao concluir um não padrão ~ ? A mina aponta para /home/users/username e é uma montagem do NFS 3 para outro host ( /home/username é usado para itens de velocidade crítica, como o perfil do navegador). Eu não mudei $HOME ( /home/users/username ) ou alguma outra loucura.

No Fedora 19 ele funciona - Tab completando scp ~/foo resultados nele substituindo o ~ com /home/username e subseqüentemente completando normalmente.

Por favor, note : Esta questão não é nem sobre o preenchimento automático como raiz nem o preenchimento automático remotamente. A conclusão do bash está instalada como uma multa funcional.

Executando o openssh-client 1: 5.9p1-5ubuntu1 e o GNU bash versão 4.2.24 (1) -release (x86_64-pc-linux-gnu)

    
por l0b0 06.09.2012 / 13:55

3 respostas

1

Ao trabalhar com o Debian Lenny, faça o seguinte:

apt-get install bash-completion

Em seguida, vá para ~ / .bash_profile para habilitá-lo localmente ou / etc / profile para adicioná-lo em todo o sistema. Cole o seguinte em:

if [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
fi
    
por 13.11.2013 / 09:59
0

bash auto-completion parece ser o caminho a percorrer. instale o pacote bash-completion .

E, em /etc/bash_completion.d/ssh , há referências ao comando scp .

    
por 14.11.2013 / 15:09
0

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).

    
por 14.08.2017 / 13:23