DEV Community

Heiker
Heiker

Posted on Edited on Originally published at vonheikemen.github.io

ÂŋQuieres usar variables de entorno en ese archivo de configuraciÃģn? Puedes... casi

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
ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025 ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025

Si estamos usando linux deberíamos obtener el mensaje.

there is no place like /home/user
ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025 ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025

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
ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025 ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025

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
ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025 ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025

Okey, si sÃģlo queremos probar este es el comando que necesitamos.

envsubst < ~/templates/npmrc
ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025 ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025

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
ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025 ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025

Para finalizar queremos tomar todo eso y redirigirlo a ~/.npmrc.

envsubst < ~/templates/npmrc > ~/.npmrc
ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025 ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025

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
ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025 ðŸ“Ē āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™: vonheikemen/quieres usar variables de entorno en ese archivo de configuracion puedes casi ddb - Kapook Update 2025

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.

buy me a coffee

Top comments (0)