En una entrada anterior (Usa un contenedor como entorno de desarrollo con ‘devcontainers’) explicaba cómo usar un contenedor y Devcontainers para suplir las carencias de MacOS con respecto a Bash.

Desde entonces uso Devcontainers más y más; por ejemplo, para desarrollar en Go ya no tengo que levantar una máquina virtual o instalar Go en mi equipo: genero un fichero devcontainer.json, indico la imagen oficial de Go y ¡listo!

No todo es perfecto; una de las cosas que últimamente estaba sufriendo es que Git no autocompleta, por ejemplo, los nombres de las ramas.

La solución a la que siempre acabo acudiendo (y ejecutando manualmente) es Autocomplete Git Commands and Branch Names.

Pero claro, yo quería automatizarlo ;)

Así que hoy explico cómo he conseguido incluir el autocompletado de Git directamente al arrancar un devcontainer.

En la especificación, vemos que Devcontainers puede ejecutar lifecycle scripts. Es decir, cuando se produce un determinado evento, DevContainer lanza un script como respuesta.

En mi caso, quiero configurar el fichero ~/.bashrc en el contenedor cuando se ha creado; para ello, he añadido a mi fichero devcontainer.json:

{
  "postCreateCommand": "/bin/bash .devcontainer/post-create.sh"
}

En la carpeta .devcontainer/, he creado el fichero post-create.sh, con el siguiente contenido:

/usr/bin/env bash

grep --quiet --fixed-strings --line-regexp 'source .devcontainer/git-completion.bash' ~/.bashrc || echo 'source .devcontainer/git-completion.bash' >> ~/.bashrc

El comando añade una línea al fichero ~/.bashrc si no existe (los detalles del comando los expliqué en la entrada Agrega una línea a un fichero sólo si no está presente #TIL).

De esta forma, tras crear el contenedor, automáticamente se añade la línea en el fichero ~/.bashrc. Cada vez que el contenedor arranque, se habilita el autocompletado para Git dentro del contenedor.

¡Problema resuelto!

P.S. Obviamente, el mismo mecanismo se puede usar para incluir el autocompletado de otras herramientas, como gcloud, etc.