Imaginen que hay una herramienta que utilizan en todas sus mÃĄquinas y esta requiere de un archivo de configuraciÃģn. Probablemente este archivo necesita de un pedazo de informaciÃģn que cambia de acuerdo al sistema operativo, o tal vez segÚn el contexto (computadora personal o de trabajo, un servidor... cosas asÃ). Entonces siempre tenemos que cambiar algÚn detalle de este archivo. ÂŋNo serÃa genial si pudÃeramos usar variables? Resulta que podemos... casi.
Les presento el comando envsubst
envsubst puede incrustar el valor de una variable de entorno en una cadena de texto que recibe desde la entrada estÃĄndar.
Esto quiere decir que en nuestra terminal podemos hacer algo asÃ.
echo 'there is no place like $HOME' | envsubst
Si estamos usando linux deberÃamos obtener el mensaje.
there is no place like /home/user
BÃĄsicamente podemos hacer trampa. Tenemos la posibilidad de usar envsubst como un pre-procesador y crear nuestros archivos de configuraciÃģn a partir de una plantilla.
Un caso de la vida real
Para mà envsubst resuelve un problema que tengo con npm. En mi carpeta de usuario tengo el archivo .npmrc con la siguiente estructura.
prefix=<una-ruta>
ignore-scripts=true
init-author=<un-nombre> (<un-enlace>)
init-license=MIT
Como podrÃĄn imaginar algunos de esos campos pueden variar segÚn la mÃĄquina o el contexto, entonces siempre me encuentro cambiando algunas cosas. Pero ahora que sÃĐ que existe envsubst puedo tener una sola plantilla en ~/templates/npmrc y usarla como una base para todas mis mÃĄquinas.
ÂŋCÃģmo harÃamos? Lo primero serÃĄ poner algo en nuestra plantilla.
prefix=$XDG_CONFIG_HOME/npm/packages
ignore-scripts=true
init-author=$USER_NAME ($CONTACT_LINK)
init-license=MIT
Okey, si sÃģlo queremos probar este es el comando que necesitamos.
envsubst < ~/templates/npmrc
Cuando usamos < lo que estamos haciendo es tomar el contenido del archivo y enviarlo a envsubst usando la entrada estÃĄndar. Esto es lo que se conoce como redirecciÃģn. Entonces, si tenemos todas las variables definidas envsubst nos mostrarÃĄ el resultado en pantalla.
prefix=/home/user/.config/npm/packages
ignore-scripts=true
init-author=Heiker (https://github.com/VonHeikemen)
init-license=MIT
Para finalizar queremos tomar todo eso y redirigirlo a ~/.npmrc.
envsubst < ~/templates/npmrc > ~/.npmrc
TÃĐcnicamente ya terminamos pero ya que estamos aquà vamos a explorar otra posibilidad.
Como demostramos al principio, la cadena de texto puede venir de cualquier comando, el Único requisito que tenemos es que debemos enviar el contenido usando la entrada estÃĄndar.
Si nos ponemos creativos podemos alojar el contenido de la plantilla en cualquier servidor (como github) y descargarlo usando curl.
curl -s "https://raw.githubusercontent.com/<user>/<repo>/main/npmrc" \
| envsubst > ~/.npmrc
De esta manera ni siquiera necesitamos que la plantilla estÃĐ en nuestra mÃĄquina.
Una alternativa multi-plataforma
Si usan linux es muy probable que ya tengan instalada esta herramienta. En caso de que no sea asà pueden intentar descargar esta versiÃģn que fue creada usando el lenguaje go.
En su pÃĄgina de descarga estÃĄn disponibles ejecutables para windows, mac y linux.
ConclusiÃģn
Aprendimos sobre el comando envsubst y cÃģmo podemos usarlo para crear un archivo de configuraciÃģn a partir de una plantilla. Vimos que envsubst recibe una cadena de texto usando la entrada estÃĄndar, lo que nos permite recibir nuestra "plantilla" desde un archivo o desde otro comando. Por Último vimos cÃģmo usar redirecciones para crear un archivo nuevo a partir del resultado de un comando.
Fuente
Gracias por su tiempo. Si este artÃculo les pareciÃģ Útil y quieren apoyar mis esfuerzos para crear mÃĄs contenido pueden dejar una propina en ko-fi.com/vonheikemen.

Top comments (0)