Conclusão da guia Bash shell, não expanda o ~

12

Eu uso muito a Tabchave quando uso o shell (bash).

Mas estou ficando irritado com o que ~sempre é expandido /home/"user". Eu não acho que sempre foi assim; existe alguma maneira de parar esse comportamento?

Um exemplo:

  1. cj@zap:~$ ls ~/
  2. pressione Tab
  3. cj@zap:~$ ls /home/cj/

Eu gostaria de continuar a ter ~/e não acabar /home/cj/.

Johan
fonte
2
"Eu não acho que sempre foi assim." - A conclusão programável substitui a configuração da linha de leitura set expand-tilde off(padrão ou definida ~/.inputrc).
Pausado até novo aviso.
"bind -v | grep til" retorna "set expand-til off" ... então eu acho que não vai ajudar.
Johan
Você pode dar uma olhada shopt -p direxpand.
gam3

Respostas:

10

Desativar a expansão de til é rápido e indolor. Abra ~/.bashrce insira o seguinte:

_expand()
{
    return 0;
}

Isso substituirá a função de expansão de /etc/bash_completion. Eu recomendo comentar sobre o que ele faz acima da função, caso você queira a expansão de volta no futuro. As alterações entrarão em vigor em uma nova instância.

John T
fonte
porém _expand(){ true; }é mais curto :)
tig
não seria _expand(){ false; }? @tig
John T
2
@ John: não, deve ser verdade. trueretorna resultado bem-sucedido e resultado bem-sucedido é 0, então return 0é igual ao truestatus de saída e return 1é igual a false. apenas tente true; echo $?e false; echo $?.
tig
@tig muita programação me confundiu ... codepad.org/Frb3RyAN Da mesma forma, você encontra isso em muitos códigos (veja o topo): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Eu diria que está ligado nas ferramentas GNU para indicar um significado mais realista, ou seja, "Verdadeiro, o programa foi executado com sucesso" ou "falso - o programa foi executado incorretamente".
John T
@John: está tudo bem :), «Até John T pode estar errado» (não se ofenda :))
tig
5

Com o bash_completion mais recente, parece que você também precisa substituir __expand_tilde_by_ref:

__expand_tilde_by_ref() {
  return 0
}
mjmt
fonte
1

Ainda mais compacto:

_expand() { :; }

... como ":" é um shell embutido equivalente a "true" :-)

Joe
fonte
1

Uma personalização mais precisa seria

_filedir_xspec () { :; }
Alexander Shcheblikin
fonte