Sous Linux (Ubuntu 11.04) en bash, est-il possible de définir temporairement une variable d'environnement qui ne sera différente de la variable normale que pendant la durée du script? Par exemple, dans un script shell, créer une application qui enregistre dans HOME portable en définissant temporairement HOME dans un dossier dans le répertoire de travail actuel, puis en lançant l'application.
linux
bash
environment-variables
suchipi
la source
la source
Réponses:
la source
vblank_mode=0 glxgears
. Cela fonctionne, mais cela dit aussivblank_mode=0: command not found
après l'exécution, alors que le préfixeenv
ne cause pas cela. [testing ...] Apparemment, zsh ne l'aime pas (mais l'utilise toujours correctement), mais bash est bien avec. Je suppose que je vais utiliser laenv
méthode à partir de maintenant.VAR1="hello" echo $VAR1
ne rien renvoyer?VAR1="hello" bash -c 'echo $VAR1'
la source
VAR=value myScript args ...
PATH=$PATH:XYZ echo $PATH | grep XYZ
n'a-t-il pas de sortie? 2. Quelle est la différence entre utiliser et ne pas utiliserenv
?PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ
- les guillemets simples sont la clé icienv
et ne pas l'utiliser?IFS=$'\n' for l in lines; do ... done
Juste mettre
au point du script où vous souhaitez que le changement se produise. Étant donné que chaque processus a son propre ensemble de variables d'environnement, cette définition cessera automatiquement d'avoir toute signification lorsque le script se terminera (et avec elle l'instance de bash qui a un environnement modifié).
la source
export
passera la variable aux sous-shell, mais il ne contrôle pas le shell parent. Si vous écrivez un script qui commence par "#! / Bin / sh" ou autre, TOUTE variable que vous définissez disparaîtra lorsque le script se terminera.source
le script qu'il sera exécuté par le même shell dans lequel vous tapez la commande.$HOME
être hérité par les commandes exécutées à partir du script. Et s'il ne le fait pas, et que le paramétrage de$HOME
n'est que pour le bénéfice du script lui-même, alors il ferait probablement mieux de modifier le script pour qu'il se réfère à autre chose que$HOME
.