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 <(...)