Optimizando tu día laboral: creando Comandos.

Optimizando tu día laboral: creando Comandos.

Cuando comenzamos en un proyecto, muchas veces tenemos que levantar varios repos, Docker, bases de datos, etc. y se vuelve bastante tedioso andar escribiendo y abriendo tabs en la terminal.

No sé ustedes, pero más de una vez me quedé dormida el día que tenía que dar una demo y ya se pueden imaginar, tartamudeando medio dormida en inglés mientras trataba de setear todo para poder compartir pantalla. 

Y casi como Pepe grillo, lo tenía a Santi diciéndome: “Si te hubieses configurado los aliases, en dos segundos tendrías todo listo.”

Antes de poder explicarles como crear sus propios comandos hay que empezar por el principio y ver algunos conceptos. 

DISCLAIMER ESTA CHARLA ESTÁ ORIENTADA A MAC, LINUX O WSL. SORRY WINDOWS

¿Qué es un SHELL?

Un sistema operativo hace uso de programas que se encargan de interpretar los comandos que introduce el usuario en una terminal y realizan las acciones en respuesta. Estos programas se denominan SHELL (Intérprete de Comandos). 


Existen varios tipos, pero los más utilizados son:

Bsh: bourne SHELL

Bash: bourne again SHELL

Zsh: Z SHELL

Los SHELL admiten comandos que pueden ser archivos o funciones ejecutables, por lo que cada usuario puede construir archivos combinando comandos base de Linux, paquetes de npm o ciertas estructuras especiales que le permita ser ejecutados desde una terminal.

Voy a asumir que usan la terminal y conocen algunos de los comandos básicos como ls para listar archivos y carpetas, cd para movernos entre los directorios y rm para borrar archivos o directorios. 

PROGRAMACIÓN DEL SHELL

El SHELL puede aceptar no solo órdenes simples, desde la línea de comandos, sino también secuencia de órdenes, grupo de órdenes y órdenes condicionales.
Piensen que un SHELL es como Node, pero en vez de interpretar JavaScript interpreta el lenguaje de comandos.

Permite construir programas y comandos llamados SHELL SCRIPTS que nos dejan automatizar diversas tareas.

Yo uso como SHELL ZSH, que tiene un archivo para configurar que se llama .zshrc. ¿Qué tengo acá, aparte de los comandos? Personal tokens de GitHub, credenciales de mi trabajo, y alguna que otra configuración para el theme de la terminal.

Lo más importante para empezar a escribir comandos es que creemos un archivo, en este caso se va a llamar .ZSH_ALIASES en la misma carpeta donde tenemos el .zshrc que suele estar en la carpeta user. ¿Por qué? Como lo tenemos que llamar en ese archivo, entonces lo vamos a importar escribiendo:

¿Y ahora podemos empezar a escribir, no? Acá me topé con un par de cosas:

En mi proyecto para abrir una de las apps dependo de otra para loguearme. ¿Cómo hago para que se levanten en simultáneo usando la misma tab?
Tenemos distintas versiones de node en cada repo y lo tengo que setear antes de correrlo. 
Tengo que levantar Docker porque si no, no tengo data.
¿Cómo quiero que se abra? ¿Todo en una misma tab o quiero que cada proceso se abra en una tab distinta?

Mientras yo me hacía estas preguntas, una vocecita me decía: “Vos no usas todos los containers de Docker, si necesitas ver los logs de uno solo ¿cómo haces?”

Y para que no anden googleando o discutan con Santi en Twitter (o X, ya no tengo idea), 3 horas para encontrar la respuesta, se las doy yo:

Instalar concurrently para poder correr comandos al mismo tiempo compartiendo la misma tab.
–  ttab –  Abre una nueva tab en la terminal (se recomienda en macOS instalarlo con brew).

Ya contenta de que tenía todo listo para arrancar, escribí mi primera función ^^

Navegamos hasta la carpeta, nvm para setear la versión de node, npx para que instale concurrently si no lo encuentra, -k para que corte todos los procesos cuando hacemos ctrl+c y yarn para que levante el proyecto (Nosotros necesitamos levantar dos en simultáneo)

Todo muy lindo, muy lindo hasta que voy a la terminal y veo:

Revisé el archivo, el import, todo y no daba con la tecla de porque no andaba.

Quiero que quede claro que esto fue hecho a propósito para el ejemplo:

Resulta que no le gustan los espacios, así que NO DEJAR ESPACIOS ENTRE EL = Y EL COMANDO DEL ALIAS (Esto no estaba en Google).

Sigamos, con respecto a lo de Docker, se solucionó de la siguiente forma:

Esa -d significa detach. Levanta el container y lo corre en segundo plano dejando que el segundo conteiner que no tiene el -D corra en la ventana de la terminal y podamos leer los logs (que en este caso es lo que me interesaba) 

Ya casi terminamos, lo prometo. Ahora como hago para correrlo todo de un solo comando?

ttab -a iTerm2 es un comando predeterminado de ttab para los que tienen iTerm2.

El nombre de la función o funciones que declaramos antes, en este caso la de Docker y la del proyecto que son las que uso día a día. Y ahora sí corro el comando frontendUp, que me levanta en dos tabs distintas cada comando (en una docker y en otra las dos apps)

En conclusión, si bien me llevó un par de días de investigación, es una buena forma de optimizar el comienzo del día laboral y de paso renegamos con otra cosa que no es JS.

Muchas gracias y vuelva prontos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *