Por que não consigo usar expansão de tabulação / preenchimento automático de variáveis de shell com cd?

4

Eu configurei uma variável em .bashrc :

export SOME_DIR=/path/to/some/dir

Agora, com ls , posso digitar ls $SOME_DIR[tab] , e a variável será expandida, e eu posso usar a guia de preenchimento automático para ir mais fundo no sistema de arquivos. No entanto, se eu tentar cd $SOME_DIR[tab] ou cd $SOME_DIR/[tab] , nada acontece.

Por que isso funciona somente com ls ? É possível fazer isso funcionar com cd ?
Eu tentei adicionar shopt -s direxpand a .bashrc , sem efeito:

    
por windbagjacket 23.09.2014 / 12:19

5 respostas

1

No Cygwin, tive o mesmo problema e tive que colocar a variável shell entre aspas. Por exemplo, cd $ccc não se expande, mas cd "$ccc" o faria, e seu cursor ainda está antes da citação à direita.

    
por 20.11.2014 / 14:27
0

Talvez você não tenha diretórios em /path/to/some/dir/ ? Eu apenas tentei cd $SOME_DIR/[tab] no meu sistema e funcionou.

    
por 25.09.2014 / 08:00
0

A única maneira de expandir a variável para mim é adicionar uma barra no final dela:

$ cd $SOME_DIR[tab] ## fails
$ cd $SOME_DIR/[tab] ## works

Eu obtenho exatamente o mesmo comportamento com cd ou ls . Você poderia ter adicionado o slash em e enevoá-lo no outro?

    
por 20.11.2014 / 15:07
0

Aparentemente, o shopt -s direxpand trabalha com tudo, exceto o cd incorporado. Por isso, adicionei apenas alias xy=cd ao meu perfil e xy funciona exatamente como cd , exceto direxpand , que usa o TAB. (Quem teria pensado que seria tão simples?)

    
por 02.06.2016 / 21:55
0

Eu recebo quase o mesmo problema com o (antigo) bash 4.2.37, não com o bash 4.3 ou 4.4.
Ou seja: a expansão funciona com ls , mas não com cd .

No entanto, como um atalho de teclado auxiliar, eu defini (de e S pand):

Ctrl-s in my ~/.inputrc:

Control-s: shell-expand-line

Isso me permite digitar: cd $SOME_DIR e depois Ctrl - s para obter a variável expandida para:

cd /path/to/some/dir

Uma associação de teclas que é igualmente útil é (de G lobbing):

Ctrl-g also in my ~/.inputrc:

Control-g: glob-expand-word

Isso me permite digitar ls b* e depois Ctrl - g para obter o b* expandido:

$ ls b*<kbd>Ctrl</kbd>-<kbd>s</kbd>
$ ls bash.html_node.tar.gz bash.pdf

Que também me permite editar a linha de comando e adicionar ou remover elementos, conforme necessário.

    
por 03.06.2016 / 18:33