Como tabular diretórios completos quando estiver no diretório symlinked?

2

Eu tenho um link simbólico:

/path/to/foo -> /path/to/bar/foo

Quando em /path/to/foo , talvez queira copiar para /path/to/bar/foo :

$ cd ../ Separador

Em seguida, nada autocomplete . Eu ainda posso cd bem, digitando o diretório "bar", no entanto.

Por que isso? Existe uma configuração ou truque que eu possa aplicar para ter essa aba completa também?

    
por berkes 25.06.2012 / 10:31

2 respostas

5

Este é um bug na conclusão do bash (um projeto de terceiros, não afiliado ao próprio bash). /etc/bash_completion é originado em ~/.bashrc por padrão no Ubuntu, e entre as milhares de linhas de código (a maioria das quais você provavelmente nunca precisará), é uma função de conclusão para o cd builtin que não manipula diretórios ligados corretamente . Se você desabilitar sua conclusão para o cd incorporado, sua conclusão de tabulação para cd deve funcionar mais como o esperado.

complete -r cd
    
por geirha 25.06.2012 / 11:45
1

Acho que isso é por design e como o Bash manipula o diretório de trabalho atual.

Compare as saídas de:

  1. pwd
  2. pwd -P

(O último exibe o diretório de trabalho atual físico ao invés do link simbólico. Pwd manual. )

Você pode fazer o Bash para sempre usar o diretório de trabalho físico usando:

set -P

O manual afirma:

  

-P Se definido, o shell não segue links simbólicos ao executar comandos como cd que alteram o funcionamento atual   diretório. Ele usa a estrutura de diretório físico. De   padrão, o bash segue a cadeia lógica de diretórios quando   executando comandos que alteram o diretório atual.

Como efeito colateral, quando você cd /path/to/foo , seu pwd será: /path/to/bar/foo .

    
por lgarzo 25.06.2012 / 11:15