¿Cómo consigo que la finalización de pestañas funcione con 'rake'?

¿Cómo consigo que la finalización de pestañas funcione con 'rake'?

Cuando intento utilizar la función de finalización de tabulación con rake, solo se sugieren archivos:

$ rails test-app | grep -v create; cd test-app
$ rake <TAB><TAB>
app/      db/       lib/      public/   README    test/     vendor/   
config/   doc/      log/      Rakefile  script/   tmp/    

El paquete rake-0.8.7-2incluye un archivo de configuración de finalización de Bash,

$ debsums -e rake
/etc/bash_completion.d/rake                                         OK

así que espero que presionar el tabulador sugiera las tareas disponibles para rastrillar:

$ rake --tasks
(in ~/sandbox/test-app)
rake db:abort_if_pending_migrations       # Raises an error if there are pending migrations
rake db:charset                           # Retrieves the charset for the current environment's database
rake db:collation                         # Retrieves the collation for the current environment's database
rake db:create                            # Create the database defined in config/database.yml for the current RAIL...
rake db:create:all                        # Create all the local databases defined in config/database.yml
rake db:drop                              # Drops the database for the current RAILS_ENV
...

¿Qué estoy haciendo mal?

El problema persiste después de reinstalar rake y reiniciar mi computadora. Mi ~/.bashrccontiene:

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

pero la finalización de rakeno parece estar registrada:

$ complete | grep rake
$

La ejecución explícita . /etc/bash_completionen el shell no resuelve el problema, pero ejecutar el siguiente comando permite la finalización raketemporal:

$ grep complete /etc/bash_completion.d/rake
[ -n "${have:-}" ] && complete -F _rake $filenames rake
$ complete -F _rake rake
$ rake <TAB><TAB>
db:abort_if_pending_migrations       db:version                           rails:update
db:charset                           doc:app                              rails:update:application_controller
db:collation                         doc:clobber_app                      rails:update:configs
db:create                            doc:clobber_plugins                  rails:update:generate_dispatchers
db:create:all                        doc:clobber_rails                    rails:update:javascripts
db:drop                              doc:guides                           rails:update:scripts
...

Respuesta1

Las terminaciones de tabulación se cargan al abrir un shell. Al instalar una aplicación, necesita volver a abrir su shell o ejecutar el siguiente comando para cargar las nuevas terminaciones de bash:

. /etc/bash_completion

Parece que esun insectoen rake. [ -n "${have:-}" ]comprueba si una variable nombrada $haveestá configurada. Esto no funcionará si la llamada anterior falló. Reemplácelo por have rake:

have rake && complete -F _rake $filenames rake

información relacionada