En écrivant du code, j'ai découvert que cette ligne:
$ TZ="America/Los_Angeles" date; echo "$TZ"
Thu Dec 24 14:39:15 PST 2015
Donne correctement l'heure réelle à "Los Angeles" et que la valeur de la variable TZ
n'est pas conservée. Tout comme il faut s'y attendre.
Cependant, avec cette ligne, que j'ai utilisée pour développer certains formats à ce jour, et qui exécute essentiellement la même chose, conserve la valeur de TZ:
TZ="America/Los_Angeles" eval date; echo "$TZ"
Thu Dec 24 14:41:34 PST 2015
America/Los_Angeles
Après plusieurs tests supplémentaires, j'ai découvert que cela ne se produit que dans certains obus. Cela se produit en dash, ksh mais pas en bash ou zsh.
Q's
Les questions sont les suivantes:
- Pourquoi la valeur de TZ est-elle conservée dans la coque actuelle?
- Comment cela pourrait-il être évité / contrôlé (si possible)?
Additionnel.
J'ai effectué des tests dans plusieurs shells avec ces deux lignes:
myTZ="America/Los_Angeles"
unset TZ; { TZ="$myTZ" date; } >/dev/null; echo -n " direct $TZ"
unset TZ; { TZ="$myTZ" eval date; } >/dev/null; echo " evaled $TZ"
Et cela se traduit:
/bin/ash : direct evaled America/Los_Angeles
/bin/dash : direct evaled America/Los_Angeles
/bin/sh : direct evaled America/Los_Angeles
/bin/bash : direct evaled
/bin/ksh93 : direct evaled America/Los_Angeles
/bin/lksh : direct evaled America/Los_Angeles
/bin/mksh : direct evaled America/Los_Angeles
/bin/zsh : direct evaled
/bin/zsh4 : direct evaled
La valeur TZ affecte le shell en cours d'exécution dans tous les shells sauf bash et zsh.