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

Eric
fuente

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/[email protected]/msg11251.html para obtener información general.

jlf
fuente
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.
David Newcomb
fuente
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