Exécution d'un script shell sans variables d'environnement

17

Comme je le sais, le nouveau script shell en cours d'exécution hérite de ses variables d'environnement. Existe-t-il un moyen de bloquer cela? (exécution du shell sans héritage de variable)

Eonil
la source

Réponses:

21

Il semble que vous puissiez préfixer votre script env -iqui effacera l'environnement avant d'exécuter le script:

env -i sh test.sh

De man env:

-i, --ignore-environment
              start with an empty environment

Je ne sais pas pourquoi vous voudriez faire cela cependant ...

vmfarms
la source
Merci. Ça a marché! J'en ai besoin pour appeler le script de construction dans IDE sans influencer les variables d'environnement de configuration d'IDE. Mais encore loin du but. Cela peut aider votre curiosité!
Eonil
Pour ajouter un autre cas d'utilisation: j'évalue actuellement fish et zsh comme alternative à bash. Mais je ne suis pas tout à fait prêt à promouvoir le shell candidat comme mon shell de connexion (comme dans chsh .... Si j'ouvre simplement une fenêtre de terminal et que j'exécute zshou fish(avec ou sans, -lpeu importe), il pollue mon environnement avec toutes sortes de variables de la shell je l'ai commencé. Faire le truc avec env -crésout ce problème pour moi. Je le fais env -i TERM=xterm-256color $(which fish).
Paidhi
Ceci est utile si vous avez une tâche cron qui échoue car l'environnement n'est pas correctement configuré et vous devez le tester; également un bon moyen de tester si vos scripts font des hypothèses sur les paramètres d'environnement. Merci!
ébloui
Un autre endroit possible où cela pourrait être utile consiste à tester certains travaux périodiques (tels que les travaux cron) pour s'assurer qu'il n'y a pas de dépendances environnementales sur le script. Même chose avec les commandes qui seraient exécutées dans une ressource "Exec" dans un manifeste de marionnettes.
TommyTheKid
1

Une possibilité (bien que cela semble plutôt moche):

exec -c $SCRIPTdémarrera $ SCRIPT avec un environnement vide. (voir man bashrecherche exec \[-cl\]).

weeheavy
la source
1
Cela fonctionnait presque également avec env -i, cependant, j'ai choisi d'utiliser env -i car exec arrête d'exécuter le reste du script.
Eonil
-1

Pour autant que je sache, la réponse est "non". Vous pouvez remplacer les variables d'environnement dans le script lui-même. La valeur de la variable d'environnement doit revenir à sa valeur d'origine une fois le script terminé. Vous devrez probablement exécuter le script en tant que processus enfant: $ this.script.sh & afin d'éviter d'avoir à vous déconnecter de votre shell chaque fois que vous exécutez le script afin de réinitialiser vos variables d'environnement à leur valeur d'origine.

Éditer:

D'après une affiche antérieure, il semblerait que je me trompe sur le fait que ce n'est pas possible.

user53079
la source