equivalente a `setx` en Ubuntu

9

Windows tiene un comando powershell llamado setxque crea o modifica variables de entorno en el entorno del usuario o del sistema.

¿Ubuntu tiene un comando similar, es decir, no usando nanoo vi, solo una línea para agregar o actualizar una variable de entorno en todo el sistema?

Solución implementada

Una línea para agregar / actualizar

grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment
Ayman
fuente

Respuestas:

12

Puede hacerlo simplemente declarándolo como nuevo en la línea de comando o volviéndolo a declarar. Por ejemplo, si desea agregar ~/testfoldera su variable de ruta, simplemente puede ingresarla en su terminal actual (esto es solo un ejemplo):

PATH="$HOME/testfolder:$PATH"

Por supuesto, esto solo lo cambiará durante el tiempo que haya abierto la sesión de terminal. Observe el $uso aquí, lo deja fuera para la declaración, pero si desea mostrarlo debe agregarlo $para expandir su contenido.

Si desea declararlos más duraderos y generales, puede agregarlos a su ~/.bashrcarchivo (solo para usted) o en /etc/bash.bashrc(todo el sistema), por ejemplo, si desea que cuenten solo para usted o para todos los usuarios. Otra opción es agregarlo a su .profilearchivo (solo para usted) donde será viable desde el momento en que inicie sesión. Puede hacerlo, echopor ejemplo, si está seguro de que esta variable no está configurada o si crea otras nuevas. (solo un ejemplo):

echo "variable=value" >> /path/filename

Sin embargo, si desea editar un archivo fuera de su directorio de usuarios, que es el caso cuando desea editar /etc/bash.bashrc, debe usarlo, sudopor lo que no puede simplemente usar un 'documento aquí', ya que esto no funcionaría, en su lugar use una línea como la siguiente:

echo "variable=value" | sudo tee -a /path/filename

Sin embargo, si la variable ya existe, puede cambiarla con el sedcomando (también solo un ejemplo):

sed -i.bak 's/variable=value/variable=new-value/' /path/filename

Esto editará la variable en el archivo, pero creará una copia de seguridad antes de la edición. Si cambia los archivos fuera de su directorio de usuarios con sed, debe usarlos sudoen la mayoría de los casos para que la línea sea:

sudo sed -i.bak 's/variable=value/variable=new-value/' /path/filename

sedTambién se puede eliminar una variable de un archivo , solo deje la segunda parte de la expresión regular vacía:

sed -i.bak 's/variable=value//' /path/filename

Si está interesado en qué variables de entorno están configuradas, puede usar el envcomando para enumerarlas, ( set -o posix ; set ) | lesso sh -c set. Los tres dan varias cantidades de salida, con la ( set -o posix ; set ) | lessdevolución de la mayoría de las variables que realmente se establecen.

Videonauth
fuente
1
En lugar de ( set -o posix ; set )que sea más simple decirlo sh -c set. Esto funcionará incluso si shes un enlace simbólico a bash(que normalmente no está en las versiones modernas de Ubuntu).
Ruslan
@ruslan sh -c setno muestra realmente todas las variables de entorno establecidas en el sistema. Sin embargo, lo incluiré como una tercera forma de mostrar algunos de ellos.
Videonauth
En realidad sh -c setmuestra todas las variables de entorno . Simplemente no muestra las variables de shell del shell de llamada, pero estas nunca son heredadas por un proceso que ejecuta desde ese shell, a menos que usted lo haga export.
Ruslan
¿Hay alguna razón válida para editar /etc/environment? Parece que es un atajo a la confusión.
Roger Lipscombe
@RogerLipscombe Gracias, no estaba seguro de eso, todavía es un lugar viable para editar variables, pero lo saqué para no causar confusión.
Videonauth
11

No hay un equivalente directo de setx /m, pero hay formas de lograr lo que setx /mhace.

setx /mpone variable=valueen HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. De No / m (es decir, por usuario) setxsimplemente pone la variable=valueen HKCU\Environment.

Usted solicitó específicamente 'todo el sistema'. Para eso, agregaría el par de valor variable a /etc/environmentOR a /etc/profile.d/<yourfile>. El primero es evaluado por pam, mientras que el segundo es evaluado por /bin/sh. Por lo tanto, en /etc/profile.d/<yourfile>, agregarías variable=value; export variable. (bash también permite export variable=value). Para /etc/environmentusted agregaría variable=value.

Los equivalentes por usuario son ~/.pam_environmenty ~/.profile.

Ver también: https://help.ubuntu.com/community/EnvironmentVariables

Cyrus Patel
fuente
7

Puede exportar variables de entorno en la línea de comandos, pero no afectará el entorno efectivo en los procesos ya iniciados, solo en el proceso actual y sus subprocesos. Por lo tanto, en la práctica, a menudo es necesario volver a iniciar sesión al cambiar las variables de entorno.

Gunnar Hjalmarsson
fuente