¿Cómo configuro una variable de entorno de usuario? (permanentemente, no sesión)

145

Esto me está irritando. Vi varias sugerencias (todas con diferentes archivos y sintaxis) y ninguna funcionó.

¿Cómo configuro una variable de entorno para un usuario específico? Estoy en Debian Squeeze. ¿Cuál es la sintaxis exacta que debo poner en el archivo para hacer ABC = "123"?

Gilles
fuente
77
¿Qué intentaste ya?
l0b0
1
edición de .bashrc, .bash_profile, .profile y .ssh / eviroment. Aunque no sé si lo he escrito en la ubicación correcta o ha tenido la sintaxis correcta cada vez
44
.bashrces el lugar principal para eso.
rozcietrzewiacz
@rozcietrzewiacz: está bien, pero ... incluso después de tener la solución, intenté configurar ABC1 y ABC2 al principio y al final de ese archivo y no está configurado en mi entorno.
1
Compruebe que .bash_profilecontiene algo como [[ -f ~/.bashrc ]] && . ~/.bashrc.
rozcietrzewiacz

Respuestas:

113

Debe poner la declaración en los archivos de inicialización de su shell:

  • Si está utilizando bash, ash, ksh o algún otro shell de estilo Bourne, puede agregar

    ABC="123"; export ABC
    

    en su .profilearchivo ( ${HOME}/.profile). Esta es la situación predeterminada en la mayoría de las instalaciones de Unix, y en particular en Debian.

    Si su shell de inicio de sesión es bash, puede usar .bash_profile( ${HOME}/.bash_profile) o en su .bash_loginlugar.

    Nota: Si alguno de estos archivos existe y su shell de inicio de sesión es bash, .profileno se lee cuando inicia sesión a través de ssh o en una consola de texto, pero aún podría leerse en lugar de .bash_profileiniciar sesión desde la GUI. Además, si no hay .bash_profile, entonces úselo .bashrc.

  • Si ha configurado zsh como su shell de inicio de sesión, use en ~/.zprofilelugar de ~/.profile.

  • Si está utilizando tcsh, agregue

    setenv ABC "123"
    

    en .loginarchivo ( ${HOME}/.login)

  • si está utilizando otro shell, consulte el manual del shell cómo definir las variables de entorno y qué archivos se ejecutan al inicio del shell.

Matteo
fuente
55
El comportamiento predeterminado de su useres cambiar la propiedad del shell actual al nombre de usuario arg, manteniendo el directorio de inicio y el entorno del usuario llamante. Para ingresar un shell de tal manera que se convierta en el nuevo usuario y obtenga todos sus ajustes ambientales ($ PATH, $ HOME, $ ABC, etc.), debe pasar a - como primer argumento para su. su - usernamelogrará lo que está pidiendo.
Tim Kennedy el
1
Espera: ¿qué quieres decir con "salido a la raíz"? En cualquier caso, hacer un 'su' no inicializa el shell. Necesitas 'su -' (ver man su)
Matteo
1
¿Por qué lo hiciste suen primer lugar? ¿No acabas de crear una raíz propiedad .profileque no puede ser utilizada por el usuario?
rozcietrzewiacz
1
@ ácido, esto es lo que debería haber hecho. La pregunta es, cuál es el origen cuando inicia sesión. Para verificar eso, primero cierre sesión .
rozcietrzewiacz
77
Como .profiletodos los shells compatibles con Bourne leen, no debe escribir la sintaxis de Bash en ese archivo. En particular, export VARIABLE=valuedebe ser refactorizado VARIABLE=value; export VARIABLE.
tripleee
48

Use el /etc/environmentarchivo para configurar las variables de entorno. Luego agregue la siguiente línea dentro del /etc/environmentarchivo.

ABC="123"

Ahora se podrá acceder a la variable ABC desde todas las sesiones de usuario. Para probar la salida de la variable, primero actualice la variable de entorno con el comando

source /etc/environment

y ejecutar echo $ABC.

Hokam
fuente
44
+1 para el comando de origen. Eso faltaba en todas las respuestas
Nerrve
55
Tenga cuidado de que /etc/environmentno sea compatible con la sintaxis completa de bash, algo que descubrí por las malas. Por ejemplo, poner PATH="/usr/bin:/usr/sbin"y luego hacer PATH="$PATH:/foo/bar"en una línea siguiente no funcionará
user2428118
No estoy seguro de si esto es un problema personal o qué, pero tuve que reiniciar mi sistema operativo después de configurarlo /etc/environment, incluso si reiniciaba el terminal bash o escribía source /etc/environment. Entonces, si tiene problemas donde la variable de entorno no se perpetúa, intente reiniciar.
Blairg23
9

Este es un procedimiento general que puede usar para casi cualquier shell. En cualquier caso, debe saber con qué shell normalmente iniciaría sesión el usuario:

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

Luego tiene que averiguar qué archivos de puntos leería normalmente este shell:

man $shell

Un atajo que podría funcionar es enumerar los archivos de puntos que contienen el nombre del shell:

ls ~/.*${shell}*

Si desea verificar si uno de los archivos se lee realmente durante el inicio de sesión, simplemente puede imprimir el nombre del archivo en cada uno de ellos, por ejemplo:

echo .bashrc

Al iniciar sesión, debe ver qué archivos se están leyendo y puede decidir cuál modificar. Tenga en cuenta que no debe intentar usar echo "$0"o algo similar, porque el valor de $0depende de cómo procese el shell los archivos de puntos, y podría ser engañoso.

Cuando se trata de declarar la variable "permanentemente", tenga en cuenta que esto solo se extiende a la sesión. No hay forma de acceder al valor de una variable sin una sesión, por lo que no tiene sentido fuera de una. Si quiere decir "solo lectura", eso depende del shell, y en Bash puede usar:

declare -r VAR

si ya tiene un valor, o

declare -r VAR=value

para asignarlo al mismo tiempo. No todos los proyectiles tienen esta característica.

Para declarar una variable en la mayoría de los shells, debe usar un nombre de variable ( [A-Za-z_][A-Za-z0-9_]*), seguido de un signo igual (y sin espacios alrededor del signo igual), luego un valor (preferiblemente citado a menos que el valor sea simple [A-Za-z0-9_]+). Por ejemplo:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1
l0b0
fuente
5

Usar exportación.

export ABC="123"

Para verificar si está configurado, use

env

y / o

env | grep ABC

Para agregarlo permanentemente, agréguelo a su ~/.bashrcarchivo.

export ABC="123"
quién soy
fuente
66
Quiere saber en caliente para definirlo permanentemente , es decir, en qué archivo poner la definición.
Matteo
1
No funciona Una vez que me desconecto, la variable desaparece. Lo necesito en todas las sesiones
1
quieres decir permenatey no permenently: D
whoami
mira editar parabashrc
whoami
55
cuál es permenate? Qué quiere decir permanent?
SSH Este
3

El comando exacto es:

echo 'export ABC = "123"' >> ~/.profile
Иван Бишевац
fuente
44
¿Exactamente? ¿Seriamente? ¿Qué shell (a) lee ~/.profiley (b) deja espacio antes y después =?
G-Man
1

La mejor manera que funcionó para mí es modificar el archivo .bashrc en el shell BASH.

use esto por ejemplo:

  1. abra su archivo .bashrc
  2. agregue esta línea:

    export <VARIABLE> = "<ANY PATH/VALUE you want>"
    

    p.ej : export HOME = "/home/user/"

    Recuerde usarlo, ""ya que el uso ' 'no funcionará y su archivo bashrc informará un error durante el abastecimiento.

  3. fuente en la sesión actual.

También traté de modificar el archivo / etc / environment pero no me permitió crear una nueva variable de entorno y cuando lo obtuve, me provocó un error de que no se encuentra la variable definida.

Ayushi Agarwal
fuente