Problemas con tzselect

Imagen de ndante

Forums: 

Cuando leo el man me dice:
[quote]El programa tzselect pide al usuario información sobre la localización actual y muestra en la salida estándar la descripción de huso horario resultante. La salida es adecuada como valor para la variable de entorno TZ.[/quote]
Luego, hago tzselect y me dice:

Therefore TZ='Atlantic/Canary' will be used.
Local time is now: Tue Jun 5 23:25:13 WEST 2007.
Universal Time is now: Tue Jun 5 22:25:13 UTC 2007.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
TZ='Atlantic/Canary'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Atlantic/Canary


(Lo importante para mi es la primera linea)

Con todo esto, entiendo que TZ se convierte en variable de entorno, adquiriendo el valor: TZ='Atlantic/Canary'.

Peeeeeero, cuando recivo inmediatemente despues esta repuesta:
bash-3.1# echo $TZ

bash-3.1#


Pienso... ¿Dios, seré tan imbecil?. Osea, ¿que faya? y ¿por que?

P.D.: esto me ocurre en TODAS las consolas SIEMPRE (El prompt es meramente anecdotico)

La variable TZ solamente

Imagen de acl

La variable TZ solamente tiene valor luego de haberle sido asignado uno. El utilitario tzselect por si solo no modifica esta variable de ambiente, solo da un valor cuerdo para la variable. Tu eres el encargado de asignarla. Tal como te indica en lo que nos muestras, debes exportar la variable en tus archivos de inicializacion del shell.

La manera en que el sistema determina la zona horaria es: 1. Mediante /etc/localtime y 2. La variable TZ en ese orden. La variable de ambiente permite a cada usuario tener una zona horaria independiente, pero debe ser manipulada al inicio de la sesion del shell cada vez que el usuario entre (con .bashrc o .bash_profile, etc)

Ufff tengo un problema....

Imagen de ndante

1º Gracias por la prontitud

Entiendo que TZ no adquiere valor alguno hasta que tu mismo se lo das. Pero la cuestion es, necesito automatizar la salida de tzselect o por lo menos sus resultados. Justo tzselect, no tiene muchas opciones de funcionamiento (ninguna que yo sepa).
¿No hay manera de obtener con un sólo comando esa misma variable, más el resultado?.
Me esplico, tengo un script y enmedio de este se realiza un tzselect, y el resultado se tiene que escribir en un archivo, logicamente, sólo la parte interesante.'Atlantic/Canary'. Si pudiese ademas eliminar la interaccion humana que necesita el mismo tzselect... mejor

P.D.: me daría igual usar cualquier otra cosa... mientras me sirva. No necesariamente deve ser tzselect (Pero el 'efecto' de este si, la variable sóla no me sirve.

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses
To:.- AMD socket940 64x2
.- CLFS 86_64 Pure 64
[Lo lograré]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Con palabras sencillas...

Imagen de ndante

1º especificar de donde vengo:

http://cross-lfs.org/files/BOOK/1.0.0/CLFS-1.0.0-x86_64-64.html#ch-system-glibc

ahora lo que quiero:

Quiero que en el paso de tzselect, sea innecesaria la mediacion del usuario. Ya sea, porque se a definido una variable anterior, como por un tzselect previo (En el sistema anfitrion). Aunque si se mira bien, ambas cosas son lo mismo. Puesto que toda configuracion del sistema anfitrion se tiene que perder en el nuevo (casi) obligatoriamente.
Aparte si os fijais, luego hay que copiar el archivo resultante a otra ubicación. Por lo que dentro de un script es necesario una variable que lo apunte ( TZ )

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses
To:.- AMD socket940 64x2
.- CLFS 86_64 Pure 64
[Lo lograré]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Ahora si esta mucho mas

Imagen de acl

Ahora si esta mucho mas claro el asunto. Segun la documentacion de tzselect, toda la comunicacion con el usuario se hace a partir de error y entrada estandar, y es solamente al final que se usa salida estandar para enviar el valor de la variable.

Asi que podrias tener algo como esto:


if [ -z "$TZ" ]
export TZ=`tzselect`
fi

Asi, en cualquier punto posterior al indicado, la variable TZ tendra un valor razonable si y solo si no ha tenido valor anteriormente.

Claro esta que esto no te quita la interaccion con el usuario (y creo que es dificil hacerlo, de donde mas puedes saber en que zona horaria te encuentras?). Ahora bien, si no te gusta tzselect, puedes quiza hacer una nueva utilidad que utilize la estructura de directorios de /usr/share/zoneinfo para encontrar la zona correcta o reutilizar algunos de los scripts que ya han sido creados por otras distribuciones.

No es la solucion, pero...

Imagen de ndante

No es la solucion, pero por ahora, tendra que bastar :D

TZ=$(tzselect)

Con esto, no evito la interaccion con el usuario, pero si puedo 'capturar' el resultado para luego usarlo. Otra cosa es que sigo teniendo que usarlo donde el libro especifica, rompiendome así la 'automatizacion' ya que para para que respondas para toda la instalacion... y no hablo de windows que solo dura media hora y puedes esperar delante de la pantalla...

P.D.: Aprobechando, y no queriendo abrir un hilo sólo para esto: recuerdo un comando: 'beep'... ¿existe algo igual en bash?

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses
To:.- AMD socket940 64x2
.- CLFS 86_64 Pure 64
[Lo lograré]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Otra forma....

Imagen de ndante

Buscando otra cosa vi esto:


echo -e '\a'

No es mejor ni peor, sólo diferente.

THX de toas toas.

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses
To:.- AMD socket940 64x2
.- CLFS 86_64 Pure 64
[Lo lograré]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Solucion al tzselect

Imagen de ndante

Se hace un menu previo al 'script' que menciono en otros post, con este menu (igual al que despliega tzselect) se crea un archivo con los numeros introducidos. En mi caso seria:

cat archivo_tzselect
6
8
3
1

Tienen que ser todos en lineas diferentes. Luego, en el 'script' se ejecuta:

TZ=$( tzselect < archivo_tzselect )

echo $TZ
atlantic/canary

THX d Toas Toas

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses-5.5
To:.- AMD socket940 64x2
.- CLFS 86_64 Pure 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]