¿Cómo restauro la finalización de tabulación en las variables de shell en la línea de comandos de bash?


4

Durante mucho tiempo configuré los directorios visitados más recientemente en las variables de shell d1, d2, etc.

En una máquina antigua de Fedora podría escribir un comando como

$ cp $ d1 /

y el shell reemplazaría $ d1 con texto como / home / acctname / projects / blog / y luego me mostraría el contenido de ... / blog, como es de esperar que se complete cualquier tabulación.

Ahora, tanto ubuntu wheezy / sid como fedora 16 simplemente \ -escape the '$', y, naturalmente, no hay terminaciones para mostrar.

Puede ver este comportamiento en acción en una ventana de Terminal OSX. En 10.8, haz algo como

ls $ HOME / para ver a qué me refiero.

¿Existe una opción u variable de shell bash que pueda restaurar el comportamiento anterior?

man bash sugiere que esto es un error:

   complete (TAB)
          Attempt  to  perform  completion  on  the  text  before  point.  Bash
          attempts completion treating the text as  a  variable  (if  the  text
          begins  with  $),  username (if the text begins with ~), hostname (if
          the text begins with @), or command (including aliases and functions)
          in  turn.   If none of these produces a match, filename completion is
          attempted.

Obtengo la finalización descrita anteriormente cuando un token comienza con '~' o una letra. Es solo '$': la finalización está rota.

Respuestas:


8

A partir de bash 4.2, este comportamiento se rige por

shopt -s direxpand # enable
shopt -u direxpand # disable

Consulte http://www.mail-archive.com/bug-bash@gnu.org/msg11251.html para obtener información general.


Realmente quería marcar esto, pero obtuve este resultado: ericp @ pacer: apps $ shopt -s direxpand bash: shopt: direxpand: nombre de opción de shell no válido ericp @ pacer: client $ bash --version GNU bash, versión 4.2. 24 (1) -release (x86_64-pc-linux-gnu) ericp @ pacer: client $ echo $ BASHOPTS checkwinsize: cmdhist: expand_aliases: extglob: extquote: force_fignore: histappend: interactive_comments: progcomp: promptvars: sourcepath Esto está en Ubuntu 12.04 .1 LTS
Eric

1
¿Cómo agrego nuevas líneas en los comentarios de stackexchange?
Eric

@Eric: no lo haces. Si tiene algo que necesita formato que sea relevante para su pregunta, agréguelo a la pregunta.
ghoti

1

No estoy muy seguro si está pidiendo una solución en su Mac o para * nix. Si está preguntando acerca de cómo cambiar su Mac, acabo de leer este sencillo tutorial para actualizar mi bash OSX desde

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.

a

GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin15.0.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

En realidad, funciona de la manera que esperaba en osx 10.1 y ubuntu 14.04 (jessie / sid): '$ d <TAB>' expande todos los vars que comienzan con '$ d' y '$ d1 / <TAB>' muestra los archivos en el directorio al que hace referencia '$ d1'. Gracias a todos.
Eric
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.