Finalización al pegar el comando Bash que comienza con pestañas

Finalización al pegar el comando Bash que comienza con pestañas

Estoy escribiendo un Dockerfiledocumento 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 inpapel?

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-getcomando:

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 icarácter, pero el siguiente nse interpreta como un "No" para salir del buscapersonas.

Finalmente, los caracteres restantes stall collectdson interpretados por el shell como un comando.

Respuesta2

Puede desactivar el comportamiento de finalización bashal 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'

información relacionada