Avec la famille shell Bourne, les variables shell ont toutes des noms en majuscules; ce qui signifie que vous ne pouvez pas dire si une variable particulière est une variable d'environnement ou pas simplement en regardant son nom. Comment déterminez-vous quelles variables du shell Bourne sont locales (définies uniquement dans le shell actuel)?
13
Réponses:
Si vous voulez voir si une variable est exportée ou non, utilisez
declare
:la source
Le moyen le plus portable est
export -p
.export -p
répertorie les variables exportées. C'est généralement le casdeclare -x
, si votre shell adeclare
.Les shells de style Bourne actuellement utilisés devraient prendre en charge
export -p
, comme l' exige POSIX :La norme poursuit en expliquant que la valeur de la variable est affichée de telle manière qu'elle permet généralement de l'utiliser ultérieurement sur le côté droit d'
=
une affectation. C'est-à-dire qu'il peut être cité. Différents obus peuvent les afficher différemment mais avec le même effet.export -p
fonctionne même dans des shells qui n'ont pas de fonctiondeclare
intégrée, comme Dash .J'ai redirigé la sortie vers la
grep
compacité, mais si vous ne la filtrez pas, vous obtenez la liste complète de vos variables exportées. D'après votre question, il semble que c'est ce que vous pourriez trouver le plus utile.Certains shells, comme Bash, utilisent un format non standard, sauf indication explicite de se comporter de manière conforme à POSIX. Dans Bash
export -p
donne la même sortie quedeclare -x
par défaut.Zsh affiche un format non standard même lorsque la compatibilité POSIX est activée:
Dans tous les cas, vous pouvez extraire des représentations portables (qui peuvent être citées) en recherchant un mot suivi de
=
. Cela ne dépend pas des mots précédents sur la ligne, tant qu'ils ne précèdent pas immédiatement=
, ce qu'ils ne devraient pas. Par exemple:Notez que toutes les entrées ne le sont pas nécessairement
=
. En effet, les variables peuvent être non définies mais exportées. Ces entrées sont filtrées par lagrep
commande ci-dessus, qui peut ou non être ce que vous voulez.La plupart du temps, vous voulez juste inspecter la sortie et donc vous ne se préoccuperont pas si les entrées sont précédées par
export
,declare -x
,typeset -x
ou autre chose. Ensuite, lancez-vousexport -p
.J'ai testé ces commandes sur Ubuntu 16.04 LTS avec des versions officiellement emballées de chaque shell.
la source
Les variables qui ne sont PAS exportées peuvent être vues à partir de la sortie de la
declare
commande dans bash.Les variables qui sont exportées peut être vu à partir de la sortie
declare -x
ou deexport
commande en bash.la source