> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/cli/es/guias/secrets/replace-env-files.md).

# Sacar las contraseñas de un archivo .env

Sustituya las contraseñas de sus archivos .env por referencias devo, incluya el archivo en un commit y ejecute la aplicación con devo secret run --env-file.

Un archivo `.env` es cómodo, pero también es el archivo con más probabilidad de filtrar una contraseña: copiado a un ticket, enviado por error o compartido con un nuevo compañero de equipo. Con Devolutions CLI, el archivo conserva su forma y los nombres de sus variables, pero cada secreto se convierte en una referencia `devo://`. El archivo se puede entonces confirmar con seguridad, y los valores llegan a su aplicación solo cuando se inicia.

## Sustituir los valores por referencias

1. Abra su archivo `.env`.
2. Para cada secreto, encuentre su referencia. Consulte [Encontrar la referencia de un secreto](/cli/es/guias/secrets/find-a-reference.md).
3. Sustituya el valor por la referencia. Deje los demás valores como están.

```bash
# Database
DB_HOST=db.internal.example
DB_USER=devo://ws/<workspace-id>/vault/<vault-id>/entry/<entry-id>/field/username
DB_PASSWORD=devo://ws/<workspace-id>/vault/<vault-id>/entry/<entry-id>/field/password

# A reference can also sit inside a longer value
DATABASE_URL="postgres://app:{{ devo://ws/<workspace-id>/vault/<vault-id>/entry/<entry-id>/field/password }}@db.internal.example/app"
```

{% hint style="info" %}
Prefiera las referencias canónicas (`devo://ws/…`) en los archivos que confirma. Siguen funcionando cuando se cambia el nombre de una entrada y se resuelven en el espacio de trabajo al que pertenecen, sea cual sea el contexto actual.
{% endhint %}

## Ejecute su aplicación con el archivo

```bash
devo secret run --env-file .env -- npm start
```

Devolutions CLI lee el archivo, resuelve cada referencia que contiene e inicia su aplicación con todas las variables del archivo en su entorno: los secretos resueltos y los valores en claro. Los valores resueltos se ocultan en lo que la aplicación imprime, como con cualquier `devo secret run`. Consulte [Ejecutar un comando con sus secretos](/cli/es/guias/secrets/run-with-secrets.md).

Puede combinar `--env-file` con `--env-ref`. Si una variable del archivo tiene el mismo nombre que una variable de su shell que ya contiene una referencia, gana el archivo. La variable de su shell se resuelve primero de todos modos: si su referencia está rota, el inicio falla igual. Quítela o corríjala.

## Cómo lee Devolutions CLI el archivo

<table><thead><tr><th width="240">EN EL ARCHIVO</th><th>QUÉ OCURRE</th></tr></thead><tbody><tr><td><code>KEY=value</code></td><td>Una variable por línea. Se quitan los espacios alrededor del nombre y del valor.</td></tr><tr><td>Las líneas vacías y las líneas que empiezan por <code>#</code></td><td>Ignorado.</td></tr><tr><td><code>KEY="value"</code> or <code>KEY='value'</code></td><td>Se quita un par de comillas coincidentes alrededor de todo el valor.</td></tr><tr><td>Una referencia dentro de un valor</td><td>Sustituido por el secreto. Envuélvalo en <code>{{ }}</code> cuando otro texto lo toque, para que Devolutions CLI sepa dónde termina.</td></tr><tr><td><code>$NAME</code>, <code>${NAME}</code> o <code>${NAME:-default}</code> dentro de una referencia</td><td>Se sustituye por el valor de una variable de entorno, por ejemplo para elegir el identificador del espacio de trabajo según el entorno. Sin un valor predeterminado, la variable debe estar definida y no vacía.</td></tr></tbody></table>

Algunas cosas que funcionan en ciertos cargadores `.env` no funcionan aquí:

* Los nombres de variable usan solo letras, dígitos y guiones bajos, y no pueden empezar por un dígito. Una línea que empieza por `export` se rechaza.
* Un `#` después de un valor no es un comentario: pasa a formar parte del valor.
* Un valor no puede abarcar varias líneas.
* El mismo nombre de variable no puede aparecer dos veces, ni a la vez en el archivo y en `--env-ref`.

## Qué confirmar

<table><thead><tr><th width="240">ARCHIVO</th><th>¿CONFIRMARLO?</th></tr></thead><tbody><tr><td>Un archivo <code>.env</code> solo con referencias</td><td>Sí. Una referencia contiene nombres o ID, nunca un valor. Sin acceso a la bóveda, no abre nada.</td></tr><tr><td>Un archivo producido por <code>devo secret inject</code></td><td>No. Contiene los valores en texto sin formato. Añádalo a <code>.gitignore</code>.</td></tr><tr><td>Un archivo <code>.env</code> que todavía contiene una contraseña</td><td>No. Sustituya primero el valor por una referencia.</td></tr></tbody></table>

{% hint style="warning" %}
Si una contraseña se confirmó alguna vez, quitarla del archivo no la quita del historial del repositorio. Cambie la contraseña en su bóveda, por ejemplo con [devo secret set](/cli/es/guias/secrets/update-a-secret.md).
{% endhint %}

## Si no funciona

* "Environment file lines must use KEY=value syntax.": una línea no tiene `=`, o empieza por uno. Corrija esa línea, o conviértala en un comentario con `#`.
* Una referencia no se resuelve: consulte [Una referencia de secreto no se resuelve](/cli/es/ayuda/troubleshooting/reference-does-not-resolve.md).
* Su herramienta solo lee un archivo de configuración, no variables de entorno: consulte [Rellenar un archivo de configuración desde una plantilla](/cli/es/guias/secrets/fill-a-template.md).

## Siguiente

* [Run a command with its secrets](/cli/es/guias/secrets/run-with-secrets.md)
* [Give an agent a credential without exposing it](/cli/es/guias/ai-agents/run-an-agent.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/cli/es/guias/secrets/replace-env-files.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
