Je veux exécuter un programme dans un environnement vide (c'est-à-dire sans définir de variables envariables). Comment faire cela en bash?
bash
environment-variables
Eugene Yarmash
la source
la source
Réponses:
Vous pouvez le faire avec
env
:Contrairement aux commentaires ci-dessous, cela efface complètement l'environnement, mais n'empêche pas la
your_command
définition de nouvelles variables. En particulier, l’exécution d’un shell entraînera l’/etc/profile
exécution de celui-ci, qui peut également comporter certains paramètres intégrés.Vous pouvez vérifier cela avec:
c'est-à-dire essuyez l'environnement puis imprimez-le. La sortie sera vide.
la source
echo 'echo $PATH' > test.sh && chmod u+x test.sh && env -i test.sh
impressions/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
.PATH
,PWD
etSHLVL
sont réglées automatiquement par Bash. +1env -i bash --norc -c "declare -p PATH"
donnedeclare -- PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
. Notez le "-x" pour l'export (et donc une partie de l'environnement) si vous l'exportez vous-même:env -i bash --norc -c "export PATH; declare -p PATH"
donnedeclare -x PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
Un
bash
environnement "propre" peut être créé avecLa
env -i
commande exécute la commande qui lui est donnée sur la ligne de commande sans transférer aucune des variables d’environnement exportées de l’ancien environnement shell vers l’environnement du programme exécuté.L'
--noprofile
option empêche labash
lecture des scripts d'initialisation de shell personnels ou à l'échelle du système qui seraient autrement lus pour un shell de connexion.L'
--norc
option empêche labash
lecture des scripts d'initialisation de shell personnels qui seraient autrement lus pour un shell interactif.la source
env -i
? Vous êtes sur quel système?env
nettoyer mon environnement,--noprofile
éviter d’approvisionner / etc / profile et mes amis, et--norc
éviter d’approvisionner ~ / .bashrc et mes amis.env -i somecommand
exécute une commande dans un environnement vide, comme l' a déjà mentionné ams .Beaucoup de programmes reposent sur des variables d'environnement importantes. Vous souhaiterez donc peut-être les conserver:
Vous pouvez également vous connecter à un petit environnement de connexion.
la source
env
ne supporte pas la--
délimitation et lesenv -i FOO=bar -- env
tentatives d'exécution d'une commande nommée--
.env -i -- FOO=bar env
, en fait. Ma faute. Non pas que le--
soit utile puisque ce qui suit ne commence pas par-
.Bien que la réponse acceptée soit correcte, ce que vous voulez généralement faire est de:
env -i bash -l -c "printenv; and any other commands"
Cela vous donne un bash nu mais fonctionnel (identique à celui que vous obtiendriez si vous vous connectiez en mode non interactif). Cela permet par exemple de définir la langue, le fuseau horaire, HOME, etc.
la source
env -i
effacéHOME
, ce qui signifie quebash -l
vous ne pouvez pas trouver votre.bash_profile
etc. Si vous voulez un shell qui ressemble à ce que vous obtiendrez lors d’une nouvelle connexion, vous avez besoin d’un indirection supplémentaire à définir enHOME
premier.Le problème avec la plupart des réponses ici, c’est que ça
env -i
effaceHOME
, donc même si vous courezbash -l
à l’intérieur, il ne lira pas votre.bash_profile
etc. Si vous recherchez un shell qui agit comme si vous veniez de vous connecter, Voudrais ceci à la place:Exemple:
la source
bash
shell de connexion sera exécuté.bash_login
ou.bash_profile
. Pour obtenir un environnement propre, utilisez--noprofile
ou définissezHOME
un répertoire ne contenant pas ces fichiers. Je suppose que cela dépend de ce que vous entendez par «propre».env -i bash -c ...
. Cette réponse concerne spécifiquement le shell qui ressemble à une nouvelle connexion sur la machine.Pour répondre au commentaire de balki (et répondre à ma propre question dans le processus :-):
la source
/usr/bin/env: invalid option -- ' ' Try '/usr/bin/env --help' for more information.
--ignore-environment
alors j'obtiens ceci:/usr/bin/env: unrecognized option '--ignore-environment SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh' Try '/usr/bin/env --help' for more information.