GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la différence entre env et set (sur Mac OS X ou Linux) ?

Pour faire court :set peut voir les variables locales du shell, env ne peut pas.

Les shells peuvent avoir des variables de 2 types :les locales, qui ne sont accessibles qu'à partir du shell actuel, et les variables d'environnement (exportées), qui sont transmises à chaque programme exécuté.

Depuis set est un intégré shell, il voit également les variables locales du shell (y compris les fonctions du shell). env d'autre part est un exécutable indépendant; il ne voit que les variables que le shell lui transmet, ou les variables d'environnement.

Lorsque vous tapez une ligne comme a=1 alors une variable locale est créée (sauf si elle existait déjà dans l'environnement). Les variables d'environnement sont créées avec export a=1


Si vous souhaitez limiter la sortie du set commande aux variables uniquement, vous pouvez l'exécuter en mode POSIX :

type -a env set
help set
(set -o posix; set) | nl

Si vous avez besoin d'un contrôle plus précis sur la liste des variables spécifiques, vous pouvez utiliser les fonctions intégrées de Bash telles que declare ou compgen , ou d'autres astuces de Bash.

man bash | less -p '-A action$'  # info on complete & compgen

# listing names of variables
compgen -A variable | nl       # list names of all shell variables
echo ${!P*}                    # list names of all variables beginning with P

compgen -A export | nl         # list names of exported shell variables
export | nl                    # same, plus always OLDPWD
declare -px | nl               # same

declare -pr                    # list readonly variables

# listing names of functions           
compgen -A function | nl
declare -F | nl
declare -Fx | nl

# show code of specified function
myfunc() { echo 'Hello, world!'; return 0; }
declare -f myfunc  

set est un shell intégré, tandis que env est un programme (/usr/bin/env)

set fait plusieurs choses, mais par lui-même, il répertorie les variables d'environnement. Il peut également définir/basculer des commutateurs, tels que set +x ou set -v etc.

env par lui-même répertorie les exportés variables d'environnement, mais peut exécuter un programme dans un environnement modifié

Voir man 1 env pour plus d'informations.


Linux
  1. Quelle est la différence entre InnoDB et MyISAM ?

  2. Quelle est la différence entre la mémoire tampon et la mémoire cache sous Linux ?

  3. Quelle est la différence entre strtok_r et strtok_s en C ?

  4. Quelle est la différence entre un pilote de plate-forme Linux et un pilote de périphérique normal ?

  5. Quelle est la différence entre un appel Library et un appel System sous Linux ?

Quelle est la différence entre les noyaux macOS et Linux

Quelle est la différence entre Linux et Unix ?

Quelle est la différence entre Rsync et BTRFS sous Linux ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

Quelle est la différence entre unlink et rm ?