programming info commands linux bash makefile tab-completion

linux - info - man bash



FinalizaciĆ³n de tabulaciĆ³n rota en make en Linux (3)

No tengo idea de cómo funciona la terminación de pestañas, pero de repente la mía está rota. Ni siquiera sé qué información proporcionar aparte del caso de uso. hay un objetivo clean en el archivo MAKE.

$ make c<tab> resultados en

$ make c23:set: command not found lean

EDITAR: Creo que de alguna manera arruiné el set bash incorporado ya man set dice: No manual entry for set y which set no informa nada. La invocación del conjunto en la terminal, sin embargo, produce un resultado.

Estoy usando: GNU bash, versión 4.3.11 (1) -release (x86_64-pc-linux-gnu) y GNU Make 3.81


Consulte /etc/bash_completion , /etc/bash_completion.d y / o /usr/share/bash-completion/completions . Debería encontrar una make archivo que contenga la secuencia de comandos a la que se llamará cuando presione Tab .

Use el sistema de empaquetado de su distribución de Linux para validar el archivo (o quizás revertir a una versión anterior).

Otra causa de esto podría ser algo en el Makefile que arroja el analizador en el script de finalización de BASH fuera de la pista.


gracias al comentario de Etan y a la indicación de Aaron de dónde están los makefiles, logré depurar esto.

set -x para poder seguir lo que estaba sucediendo al completar la pestaña. El resultado de make c<tab> consiste principalmente en comandos del archivo de finalización de bash para make , ubicado en /usr/share/bash-completion/completions/make (1). Sin embargo, noté una inconsistencia entre la salida y el archivo. Hacia el final, la salida dijo:

+ local mode=-- + (( COMP_TYPE != 9 )) ++ set +o ++ grep --colour=auto -n -F posix + local ''reset=23:set +o posix'' + set +o posix

Lo cual identifiqué como correspondiente a estas líneas del archivo:

if (( COMP_TYPE != 9 )); then mode=-d # display-only mode fi local reset=$( set +o | grep -F posix ); set +o posix # for <(...)

Entonces la salida hizo un grep --colour=auto -n lugar de solo grep . De hecho, había configurado este alias para grep

Haz que funcionara tan pronto como eliminé el alias.

Espero que esto ayude a otros a resolver sus problemas.

EDITAR: He enviado un informe de error aquí: https://alioth.debian.org/tracker/index.php?func=detail&aid=315108&group_id=100114&atid=413095


No estoy tratando de obtener ningún crédito aquí, pero la mejor solución está un poco oculta en los comentarios ... ¡ Vota este comentario en lugar de mi respuesta!

Pasos sencillos para arreglar esto:

sudo vi /usr/share/bash-completion/completions/make

encuentra la línea que tiene la instrucción grep. Debe tener un aspecto como este:

local reset=$( set +o | grep -F posix ); set +o posix # for <(...)

agregue una " / " antes de la instrucción "grep":

local reset=$( set +o | /grep -F posix ); set +o posix # for <(...)