systemadmin.es » Utilidades » Los puntos y las comas de la salida de los comandos

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 Imprimir

3 comments to “Los puntos y las comas de la salida de los comandos”

  1. 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.

  2. 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.

  3. 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,

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>