Completar la pestaña de shell Bash, no expanda el ~

12

Uso mucho la Tabclave cuando uso el shell (bash).

Pero me molesta que ~siempre se expanda /home/"user". No creo que siempre haya sido así; ¿Hay alguna manera de detener este comportamiento?

Un ejemplo:

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

Me gustaría seguir teniendo ~/y no terminar con /home/cj/.

Johan
fuente
2
"No creo que siempre haya sido así". - La finalización programable anula la configuración de línea de lectura set expand-tilde off(predeterminada o establecida ~/.inputrc)
Pausado hasta nuevo aviso.
"bind -v | grep tilde" devuelve "set expand-tilde off" ... así que no creo que ayude.
Johan
Puedes echar un vistazo shopt -p direxpand.
gam3

Respuestas:

10

Deshabilitar la expansión de tilde es rápido e indoloro. Abre ~/.bashrce inserta esto:

_expand()
{
    return 0;
}

Esto anulará la función de expansión de /etc/bash_completion. Recomiendo comentar sobre lo que hace sobre la función en caso de que desee la expansión en el futuro. Los cambios tendrán efecto en una nueva instancia.

John T
fuente
aunque _expand(){ true; }es más corto :)
tig
no seria _expand(){ false; }? @tig
John T
2
@John: no, debería ser cierto. truedevuelve el resultado exitoso y el resultado exitoso es 0, por lo que return 0es igual al trueestado de salida y return 1es igual a false. solo intenta true; echo $?y false; echo $?.
tig
@tig demasiada programación me ha confundido ... codepad.org/Frb3RyAN Del mismo modo, encontrará esto en muchos códigos (ver arriba): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Supongo que está activado en las herramientas de GNU para indicar un significado más realista, es decir, "Verdadero, el programa se ejecutó correctamente" o "falso: el programa se ejecutó incorrectamente".
John T
@John: eso está bien :), «Incluso John T puede estar equivocado» (no te ofendas :))
tig
5

Con el bash_completion más reciente, parece que también debe anular __expand_tilde_by_ref:

__expand_tilde_by_ref() {
  return 0
}
mjmt
fuente
1

Aún más compacto:

_expand() { :; }

... como ":" es un shell incorporado equivalente a "verdadero" :-)

Joe
fuente
1

Una personalización más precisa sería

_filedir_xspec () { :; }
Alexander Shcheblikin
fuente