Hola, estaba yo divagando un rato... En vista de las respuestas obtenidas en mi correo sobre "cómo obtener la carga de la CPU" he comprobado algo que todos ya sabemos: que en la mayoría de ocasiones si queremos obtener datos concretos de forma automatizada debemos ejecutar el comando correspondiente y parsear la salida de pantalla para recortar el campo que nos interesa y demás.
Siempre me ha gustado mucho el concepto de "separación de formato y contenido", cosa que se hace en la web (CSS y HTML) pero en absoluto en la consola Linux. Y me da un poco de miedo, pongo un ejemplo: Imaginemos que un programa monitoriza la swap usada, para ello tendrá que llamar internamente al comando "free" que da un resultado: # free -m total used free shared buffers cached Mem: 1011 992 19 0 140 493 -/+ buffers/cache: 358 652 Swap: 698 137 560 y añadir tuberías para hacer primero un "grep Swap" y luego un cut/sed/awk para quedarse con el segundo campo numérico. Tengamos en cuenta en este punto que la salida de "free" (y de tantos otros comandos) está formateada para ser visualmente "atractiva", en absoluto está pensada para ser procesada/parseada, luego hace falta la colección de amigos de Bash de antes (grep, cut...) para obtener el dato que nos interesa. ¿Y qué pasa si de repente el autor de "free" decide cambiar mínimamente el ASPECTO de la salida de "free"? ¿Y si cambia el orden de las columnas en base a un estudio de usabilidad o lo que sea? Miedo me da la cantidad de programas que parsean la salida de "free" y que dejarían de funcionar con la nueva versión de "free", total, "por un simple cambio de formato VISUAL!!!". A todo esto, me viene a la mente un concepto que escuché sobre una supuesta nueva consola de Microsoft, que ni sé si se ha hecho realidad ni me importa, pero la idea era interesante: La salida de los comandos se refleja en un objeto con atributos correspondientes a los distintos campos que se muestran (o incluso otros). Pongo un ejemplo: El comando "free" da una salida VISUAL así: # free -m total used free shared buffers cached Mem: 1011 992 19 0 140 493 -/+ buffers/cache: 358 652 Swap: 698 137 560 Imaginemos que un programa necesita conocer la swap usada. Con la salida en forma de objeto (que podría ser una variable/objeto llamada "out") sería tan sencillo como: $out.swap.used Es decir, cada comando definiría su propio API de atributos que genera, que serían descritos en el "man" o "--help". El programador podría entonces decidir cambiar drásticamente el aspecto mediocre de la salida del comando y no pasaría nada pues el objeto $out seguiría siendo igual. En Linux veo dos problemas grandes: - La ensalada y anarquía en cuanto a ficheros de configuración, obligando a los desarrolladores de otras aplicaciones a hacer auténticas peripecias parseando otros ficheros paridos cada uno por su madre. - El problema que describo, en el que la salida visual interfiere completamente con la salida "computacional" en los comandos básicos. En fin, ¿qué opináis? ¿sería positivo esta salida de comandos en forma de objeto? ¿o es una tontería? Saludos. -- Iñaki Baz Castillo