export VARIABLE_NAME='some value'
est la façon de définir une variable d'environnement dans toute enveloppe compatible POSIX ( sh
, dash
, bash
, ksh
, etc .; également ZSH). Si la variable a déjà une valeur, vous pouvez l'utiliser export VARIABLE_NAME
pour en faire une variable d'environnement sans modifier sa valeur.
Les shells Bourne pré-POSIX ne le supportaient pas, c'est pourquoi vous verrez des scripts à éviter export VARIABLE_NAME='some value'
et à utiliser à la VARIABLE_NAME='some value'; export VARIABLE_NAME
place. Mais les coques Bourne pré-POSIX sont extrêmement rares de nos jours.
setenv VARIABLE_NAME='some value'
est la syntaxe csh pour définir une variable d'environnement. setenv
n'existe pas dans sh, et csh est extrêmement rarement utilisé dans les scripts et a été dépassé par bash pour une utilisation interactive pendant les 20 dernières années (et zsh pendant encore plus longtemps), vous pouvez donc l'oublier à moins de le rencontrer.
La env
commande est très rarement utile sauf dans les lignes de shebang . Lorsqu'il est invoqué sans arguments, il affiche l'environnement, mais export
il le fait mieux (trié et souvent cité pour lever l'ambiguïté des nouvelles lignes dans les valeurs des nouvelles lignes qui séparent les valeurs). Lorsqu'elle est invoquée avec des arguments, elle exécute une commande avec des variables d'environnement supplémentaires, mais la même commande sans env
fonctionne également ( VAR=value mycommand
s'exécute mycommand
avec VAR
set to value
, comme env VAR=value mycommand
). La raison env
est utile dans la ligne shebang, c'est qu'elle effectue une PATH
recherche et qu'il ne fait rien d'autre lorsqu'elle est invoquée avec un nom de commande. La env
commande peut être utile pour exécuter une commande avec seulement quelques variables d'environnement avec-i
, ou sans paramètres pour afficher l'environnement, y compris les variables avec des noms non valides que le shell n'importe pas.
Gilles 'SO- arrête d'être méchant'
la source
VAR=asdf
jour l'environnement s'ilVAR
était déjà dans l'environnement. (Ce n'était pas vrai dans le shell Bourne d'origine.)Il y a plusieurs questions avec des réponses qui répondent à ceci:
Essayer de comprendre .bashrc, env et export
Différence entre les variables shell exportées et celles qui ne sont pas en bash
Quelle est la différence d'utilisation entre les variables shell et les variables d'environnement?
La commande bash setenv est introuvable
Quelle est la différence entre "exporter" et "setenv"?
(etc.)
la source