Cela m'irrite. J'ai vu plusieurs suggestions (toutes utilisant des fichiers et une syntaxe différents) et aucune d'entre elles n'a fonctionné.
Comment puis-je définir une variable d'environnement pour un utilisateur spécifique ? Je suis sur debian squeeze. Quelle est la syntaxe exacte que je dois mettre dans le fichier pour que ABC = "123" ?
Vous devez placer la déclaration dans les fichiers d'initialisation de votre shell :
Si vous utilisez bash, ash, ksh ou un autre shell de style Bourne, vous pouvez ajouter
ABC="123" ; export ABC
dans votre fichier .profile
(${HOME}/.profile
). C'est la situation par défaut sur la plupart des installations Unix, et en particulier sur Debian.
Si votre shell de connexion est bash, vous pouvez utiliser .bash_profile
(${HOME}/.bash_profile
) ou .bash_login
à la place.
Note: Si l'un de ces fichiers existe et que votre shell de connexion est bash, .profile
n'est pas lu lorsque vous vous connectez par ssh ou sur une console texte, mais il peut quand même être lu à la place de .bash_profile
si vous vous connectez depuis l'interface graphique. Aussi, s'il n'y a pas de .bash_profile
, alors utilisez .bashrc
.
Si vous avez défini zsh comme votre shell de connexion, utilisez ~/.zprofile
au lieu de ~/.profile
.
Si vous utilisez tcsh, ajoutez
setenv ABC "123" ;
dans le fichier .login
(${HOME}/.login
)
Il s'agit d'une procédure générale que vous pouvez utiliser pour pratiquement tous les shells. Dans tous les cas, vous devez savoir avec quel shell l'utilisateur se connecte normalement :
path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"
Ensuite, vous devez déterminer les fichiers point que ce shell devrait normalement lire :
man $shell
Un raccourci qui pourrait fonctionner est de lister les fichiers point qui contiennent le nom de l'interpréteur de commandes :
ls ~/.*${shell}*
Si vous voulez vérifier si l'un des fichiers est effectivement lu lors de la connexion, vous pouvez simplement imprimer le nom du fichier dans chacun d'eux, par exemple :
echo .bashrc
Lorsque vous vous connectez, vous devriez alors voir quels fichiers sont lus, et vous pouvez décider lequel modifier. Attention, vous ne devriez pas essayer d'utiliser echo "$0"
ou similaire, parce que la valeur de $0
dépend de la façon dont le shell traite les fichiers point, et pourrait être trompeuse.
Quand il s'agit de déclarer la variable "permanently" ;, notez que cela ne s'étend qu'à la session. Il n'y a aucun moyen d'accéder à la valeur d'une variable sans session, elle n'a donc aucune signification en dehors de celle-ci. Si vous voulez dire "read-only" ;, cela dépend du shell, et dans Bash vous pouvez utiliser :
declare -r VAR
s'il a déjà une valeur, ou
declare -r VAR=value
pour l'attribuer en même temps. Tous les shells ne disposent pas de cette fonctionnalité.
Pour déclarer une variable dans la plupart des shells, vous devez utiliser un nom de variable ([A-Za-z_][A-Za-z0-9_]*
), suivi d'un signe égal (et sans espace autour du signe égal), puis une valeur (de préférence entre guillemets sauf si la valeur est un simple [A-Za-z0-9_]+
). Par exemple :
name="John Doe"
ip=127.0.0.1
HORRIBLE=1
Utilisez l'exportation.
export ABC="123"
Pour vérifier s'il est défini, utilisez
env
et/ou
env | grep ABC
Pour l'ajouter de façon permanente, ajoutez ceci à votre fichier ~/.bashrc
.
export ABC="123"