
Estoy escribiendo un Dockerfile
documento que estoy formateando usando pestañas (que normalmente uso en todas partes).
Pero copié un comando de varias líneas donde la segunda línea comienza con dos caracteres de tabulación, es decir:
apt-get -y update && \
apt-get -y install collectd \ # begin two tabs
La primera línea se ejecuta correctamente pero la segunda línea intenta "autocompletarse", muestra todos los comandos posibles y luego:
> stall collectd
# [ apt-get updating ]
bash: stall: command not found
Entiendo el comportamiento de "autocompletar", pero stall collectd
? ¿Por qué Bash se come el apt-get -y in
papel?
Respuesta1
La respuesta del caosExplica claramente cómo desactivar este comportamiento, pero interpreté esta pregunta como motivada por la curiosidad sobre lo que pasó con la primera parte del apt-get
comando:
Si tuviera que escribir dos pestañas, Bash le preguntaría si desea hacerlo.
¿Mostrar todas las 5177 posibilidades? (sí o no)?
Tenga en cuenta que la cantidad de posibilidades depende de su propio entorno.
Si respondiera con cualquiera de los caracteres de la cadena apt-get -
, Bash los ignoraría ya que solo quiere un sí o un no. Cuando obtiene el y
, muestra todas las posibilidades.
En las versiones modernas de Bash, esta lista se muestra en un buscapersonas que tiene un More?
mensaje en la parte inferior. El buscapersonas utiliza el carácter de espacio para desplazarse hacia abajo en una página, ignora el siguiente i
carácter, pero el siguiente n
se interpreta como un "No" para salir del buscapersonas.
Finalmente, los caracteres restantes stall collectd
son interpretados por el shell como un comando.
Respuesta2
Puede desactivar el comportamiento de finalización bash
al presionar la tabtecla:
bind 'set disable-completion on'
Ahora, la tabclave simplemente sangra la línea como si estuviera dentro de un editor. Esto es sólo temporal. En la siguiente sesión de shell no está configurado. Si desea que sea permanente, agréguelo a su archivo ~/.inputrc
.
Para volver a habilitar el tabuso de la clave:
bind 'set disable-completion off'