A pesar de sus múltiples defectos, las shell de Unix son tremendamente útiles y fantásticas. Por eso siempre tengo abierta una Terminal.app. De hecho una de las razones por las que me animé a usar el Mac OS X era porque no iba a tener que abandonar una de mis herramientas favoritas...
Recientemente he descubierto una ventaja más las functions. Que verguenza que haya tardado tanto, porque es una opción bastante antigua en la historia de las shells. Y por esto mismo no hay casi problemas en usarla en tu shell preferida: existen en la ksh, en la bash y por supuesto en la fantástica zsh....
Vale que son mucho más potentes (de hecho cumplen el cometido de permitir subrutinas en los scripts de los shells) pero yo las utilizo sobre todo como alias en steroides: para poder añadir comandos avanzados en la linea de comando. Vamos con un ejemplo.
locate() { mdfind "kMDItemFSName = $1" }
Esto es mi substituto del 'locate' usando la versión SpotLight para la linea de comando (que tiene un nombre que no me mola nada, pero tiene justificació´n: meta data find). Y no, no es equivalente a 'mdfind $1' (eso devuelve otras cosas). Bueno, es un ejemplo ultra-chorras, pero tiene su sitio seguro en mi .zshrc.
Bueno, este ejemplo no deja clara toda la potencia de las funciones... Porque contrariamente a un alias se puede añadir cualquier código, como si fuese un script normal. Así que las potencia es casi infinita. La diferencia es que la función esta cargada en memoria cosa que en el script no.