Los puntos y las comas de la salida de los comandos
Al crear scripts para obtener ciertos valores de la salida de algunos comandos se suele sobrentender que la salida no varía, pero si copiamos el script de un sistema a otro nos podemos encontrar que no funciona.
Esto tiene que ver con las variables de idioma. Por ejemplo, si definimos la variable LANG con el idioma en castellano veremos comas en el iostat mientas que en inglés veremos puntos:
# LANG="en_US" iostat -dkx 1 1 Linux 2.6.33.5-xxxx-grs-ipv4-32 (qapla.systemadmin.es) 02/08/2012 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.02 18.55 0.08 2.96 3.51 30.67 22.50 0.02 7.48 3.75 1.14 (...) # LANG="es_ES" iostat -dkx 1 1 Linux 2.6.33.5-xxxx-grs-ipv4-32 (qapla.systemadmin.es) 08/02/12 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0,02 18,55 0,08 2,96 3,51 30,67 22,50 0,02 7,48 3,75 1,14 (...)
Personalmente siempre instalo los equipos en inglés para evitar mensajes raros, pero para poder instalar nuestros scripts en equipos que están instalados en otros idiomas podemos usar la variable LC_ALL.
Mediante la variable de entorno LC_ALL podemos sobrescribir el contenido de las variables LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME y la variable LANG. En dicha variable deberemos indicar el idioma con el que esperamos la salida de los comandos y sus mensajes. En el caso concreto de los puntos o las comas en los valores, podríamos usar únicamente la variable LC_NUMERIC.
Así, simplemente deberemos añadir al principio del script un export para asegurarnos de obtener los mismos resultados independientemente del idioma con el que este instalado el equipo:
#!/bin/bash export LC_ALL="en_US" (...)
Relacionados
Imprimir
9. February 2012 at 12:00 pm :
Y si el sistema no tiene el “en_US”? El locale “POSIX” funciona siempre en cualquier sistema:
http://pubs.opengroup.org/onlinepubs/009604499/functions/setlocale.html
Saludos.
9. February 2012 at 6:29 pm :
Lo otro que se puede hacer seria algo asi
$ LC_ALL=”en_US” comando
Esto lo hago cuando quiero ver la salida de ciertos comandos en Ingles cuando tengo configurado el idioma Español en mi sistema.
9. February 2012 at 7:03 pm :
Sí, exacto. Como en los ejemplos de iostat del post. El export me refiero que lo podemos hacer para que todo el script se ejecute bien y no tener que añadirlo a cada comando
saludos,