Durante la scrittura del codice ho scoperto che questa riga:
$ TZ="America/Los_Angeles" date; echo "$TZ"
Thu Dec 24 14:39:15 PST 2015
Indica correttamente l'ora effettiva in "Los Angeles" e che il valore della variabile TZ
non viene mantenuto. Tutto come dovrebbe essere previsto.
Tuttavia, con questa linea, che ho usato per espandere alcuni formati fino ad oggi, e che essenzialmente esegue la stessa cosa, mantiene il valore di TZ:
TZ="America/Los_Angeles" eval date; echo "$TZ"
Thu Dec 24 14:41:34 PST 2015
America/Los_Angeles
Dopo diversi altri test, ho scoperto che ciò accade solo in alcune shell. Succede in trattino, ksh ma non in bash o zsh.
Q
Le domande sono:
- Perché il valore di TZ viene mantenuto nella presente shell?
- Come potrebbe essere evitato / controllato (se possibile)?
Ulteriori.
Ho eseguito test in diverse shell con queste due righe:
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"
E questo risulta:
/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
Il valore TZ influenza la shell in esecuzione in tutte le shell tranne bash e zsh.