<body>

Sitios web relacionados: PingBlog | Fotos

jueves, abril 10, 2008

Cuando Shell no es suficiente: Subshell

OK, un pequeño ejercicio para el lector: Suponga que tenemos 5 tareas que toman bastante tiempo en completar:

  1. slowRubyScriptA
  2. slowRubyScriptB
  3. slowRubyScriptC
  4. slowRubyScriptD
  5. slowRubyScriptE
  6. slowRubyScriptF

Y deben correr en el siguiente orden:
  • B,C dependende de A
  • D depende de C,B
  • E,F tardan mucho más que los demás y no dependen de nadie

Una forma de hacerlo es:
 
1 #!/bin/bash
2 (
3 (
4 slowRubyScriptA
5 slowRubyScriptB &
6 slowRubyScriptC &
7 ) &
8 wait
9 slowRubyScriptD
10 ) &
11
12 slowRubyScriptE &
13 slowRubyScriptF &
14 wait
15 echo "All done"


Si, el ejemplo no es muy útil pero muestra una caracteristica muy útil de Bash y otros Shell: El uso de Subshells. Fijese como no hubo necesidad de escribir otro script adicional para arrancar nuestros comandos.


Buscar en otros sitios:
Blogalaxia:, ,
Technorati:, ,
To2blogs:, ,
Del.icio.us:, ,

Etiquetas: , ,

sábado, marzo 15, 2008

Trucos UNIX: ¿Como matar todos los procesos de un usuario?

Bueno, si usted tiene un montón de servidores a los cuales se puede conectar con SSH y lo quiere es matar todos los procesos de un usuario en particular, entonces puede usar algo como esto:

1 #!/bin/bash
2 for machine in `cat myhostfile`; do
3 ssh -x -q -f $machine "/usr/bin/pkill -9 -U myuser"
4 done
Funciona bajo Solaris 7 o superior y Linux. OS X por supuesto no lo tiene :(

Buscar en otros sitios:

Blogalaxia:, , ,
Technorati:, , ,
To2blogs:, , ,
Del.icio.us:, , ,

Etiquetas: , , ,

lunes, junio 18, 2007

Trucos UNIX: Cuando un alias no es suficiente

A mi me encanta UNIX por su linea de comandos. Sin embargo también me da una pereza increible escribir algo tan largo como esto cada vez que quiero notificar a los directorios de blogs que mi página está actualizada:

/Users/josevnz/bin/ping_controller.sh veneblogs,weblogs,technorati,bitacoras.com,pingomatic kodegeek http://kodegeek.com

Asi que un alias cae como anillo al dedo:

alias pingall='/Users/josevnz/bin/ping_controller.sh veneblogs,weblogs,technorati,bitacoras.com,pingomatic kodegeek http://kodegeek.com'

Para después escribir solamante "pingall".

Sin embargo, que ocurre si por ejemplo quisiera pasarle el titulo del blog a ciertos directorios como todosblogs.com cada vez que hago el ping:

pingall "Este es otro post del fabuloso Kodegeek"

Nada, no se puede. Con un alias estoy jodido porque no soportan argumentos.

Pero no todo está perdido. Para eso simplemente ponemos una pequeña función (les muestro la sintaxis en Bash) que nos haga el favor (primero haga unlias ping para eliminar el viejo alias):

function pingall { /Users/josevnz/bin/ping_controller.sh veneblogs,weblogs,technorati,bitacoras.com,pingomatic kodegeek http://kodegeek.com $1 }

Y si quiere guardar sus cambios entonces pongalos en su ~/.profile, ~/.bashrc o equivalente.

Blogalaxia.com:alias, bash, function, unix
Technorati.com:alias, bash, function, unix

Etiquetas: , , ,