A blog about data, information and IT, by Mario Alberich

May 31
2013

Phing (III) - Crear variables y ejecutar comandos shell

En el último artículo de Phing nos habíamos quedado en la introducción de datos, y con la posibilidad de definir las opciones que tiene el usuario. Vamos a ver dos funcionalidades más de Phing.

Propiedades (variables)

Creación


Puedes utilizar dos formas generales. Para empezar la más simple, utilizando el tag , o propertyTask. Esto se indica así:


Otra opción es utilizar la introducción de datos, tal como lo vimos en el segundo ejemplo:

Valor de variable1

Con cualquiera de estas opciones estás inicializando una variable que podrás utilizar.

El contexto de las variables es el mismo que el de su creación: es decir, una variable creada en un target sólo estará disponible en su propio target. Si se crea en el contexto , estará disponible en todas las operaciones del proyecto (el archivo XML), pero no estará disponible en otros proyectos llamados desde éste.

Invocación


Las variables en Phing se invocan utilizando el formato ${nombre-variable}:

...

Variable1 has value ${var1}
...

Así que ahora ya puedes generar y utilizar variables en los builds.

Archivos de propiedades


En algunos casos, en vez de indicar los valores en tags o solicitándolos al usuario, te puede interesar indicarlos en un archivo de propiedades.  Estos archivos deben tener un nombre acabado en ".properties".

El contenido de un archivo de propiedades al que, por ejemplo, puede tener un archivo INI. Es decir, un conjunto de claves y valores, pero sin apartados [separados por títulos con claves].

# Los archivos de propiedades contienen pares clave/valor
# Los valores de propiedades pueden contener:
# 1. caracteres alfanuméricos
# 2. y puntos
# Pero no pueden contener caracteres especiales
# Aprovecha para crear "namespaces" de variables
myapp.cache.enable=1
myapp.cache.ttl=500
myapp.session.save=1

Así que ahora puedes cargar este archivo (supongamos que se llama file.properties y está en el mismo directorio que el archivo build.xml), en el proyecto (o el target) que lo necesiten, con la instrucción:

...

...

Esto permite diferenciar los datos del proceso, y por ello simplifica la parametrización de algunas operaciones, como por ejemplo:

  • cargar ciertas configuraciones según el sistema operativo.
  • Solicitar un al usuario y obtener las propiedades de su archivo específico.


Supongo que ya ves por dónde va el tema: reutilizar más fácilmente el proceso, con sólo variar las configuraciones.

Propiedades disponibles proporcionadas por Phing


La siguiente es una lista de las propiedades, tal como constan en la documentación de Phing. Estas variables están disponibles desde cualquier punto de la ejecución:

























Propiedad Contenido
application.startdir Directorio actual de ejecución
env.* Variables de entorno extraídas de $_SERVER.
host.arch Arquitectura del sistema, ej. i586No disponible en equipos Windows
host.domain Nombre del dominio, ej. php.net. No disponible en equipos Windows
host.fstype Tipo de sistema de archivos. Los valores posibles son UNIXWINNTWIN32
host.name Nombre de host del sistema operativo, según lo retorna la función posix_uname()No disponible en equipos Windows.
host.os Descripción del sistema operativo, proporcionada por la variable PHP_OS
host.os.release Número de entrega del sistema operativo. No disponible en equipos Windows.
host.os.version Versión del sistema operativo i.e. #4 Tue Jul 20 17:01:36 MEST 1999No disponible en equipos Windows
line.separator Caracter(es) que marcan el final de línea, "\n" para Linux, "\r\n" para Windows, "\r" para Macintosh.
os.name Descripción del sistema operativo, proporcionada por la variable PHP_OS
phing.file Ruta completa hasta el archivo build.
phing.dir Ruta que contiene el buildfile actual.
phing.home Directorio de instalación de Phing, no indicado en las instalaciones desde PEAR.
phing.version Versión actual de Phing.
phing.project.name Nombre del proyecto que se procesa en este momento.
php.classpath Valor de la variable de entorno PHP_CLASSPATH.
php.version Versión del intérprete PHP. El mismo que la constante PHP_VERSION.
project.basedir El directorio base actual.
user.home Valor de la variable de entorno HOME.

Ejecuciones de comandos shell

Por ejemplo, uno muy sencillito: obtener el nombre del usuario que está ejecutando el script:

El comando whoami nos devuelve el nombre de usuario que está autenticado en la consola.  Puedes ejecutarlo directamente en una consola y verificar que retorna los mismos valores.

Con esta opción tan sencilla, tendremos una variable llamada username que tendrá el nombre del usuario. Y podremos ejecutar algo así como:

El usuario ${username} está ejecutando el script

El comando tiene otras varias opciones que te recomiendo conocer. Por ahora lo dejamos aquí.

Tags

gestión documental 10     Recuperación información 11     Linux 7     Usabilidad 5     open source 3     Tagging 12     lógica borrosa 2     fuentes de información 12     Google 6     off-topic 6     spam 2     grafos 6     Web social 11     modelización 12     Productividad 11     buscadores 2     utilidades 17     Profesionales 9     SEO 5     estándares 3     veracidad 3     relevancia 2     lingüística 2     PLN 2     lenguajes documentales 2     apis-mashups 3     reseñas 7     Flash 7     Gráficos estadísticos 13     Publicidad 3     Innovación 5     muestreo estadístico 9     PHP 14     internet 2     testeo 12     desarrollo 3     visualizacion 36     javascript 16     datos abiertos 9     elecciones 2     simulación 5     html5 7     phing 9     ssh 2     seguridad 3     indicadores 2     demografía 3     media 2     algoritmos 7     shell 4     mysql 2     backup 2     big data 6     twitter 2     d3js 11     revealjs 2     metodología 6     data-journalism 6     smartcities 2     NYT 2     privacidad 3     benchmarking 4     recopilaciones 21     magento 5     formacion 2     github 2     HHVM 3     psicología 2     angularjs 3     grep 2     nodejs 5     promises 2     mapreduce 3     crossfilter 2     exploración de datos 2     machine learning 2    

© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.