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


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.


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
}

1

Aún más compacto:

_expand() { :; }

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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.