Contenidos
Primer contacto con Bash
   Feb 20, 2021     2 min lectura

Hace tiempo que tenía pendiente mejorar mis skills con la shell, pero siempre encontraba otra cosa “más importante/interesante” para aprender en ese momento.

Hace unas semanas me di cuenta de que era algo que ya no debía seguir posponiendo, así que empecé un curso de bash con codely.tv. Me gustó mucho, lo terminé en un pis-pas e hice otro que ya era menos básico.

He de decir que ya sabía que era algo que iba a mejorar mi productividad con creces, pero aún así me sorprendió.

Los comandos y consejos que dan en el curso me parecen muy útiles porque sirven para el día a día y facilitan mucho la vida. Ya estaba familiarizada con algunos de ellos y me gustaban, pero otros me parecieron simplemente maravillosos.

Me quedé fascinada con fzf. Este comando te permite usar la shell de forma interactiva y si encima lo combinas con otros comandos…MAGIC!

También descubrí explainshell. Es una herramienta que da una descripción/explicación de los comandos que le has introducido. Me parece muy útil cuando te pasan algún comando y no sabes muy bien qué hace, siempre lo puedes consultar aquí. Ej. comando: ls -la (ejemplo muy fácil, lo sé 😊)

Explain shell

Aparte del uso de los comandos, he aprendido cómo funciona la shell “por dentro”. Los ficheros de configuración, scripts y “dónde hay que tocar” para obtener cierto resultado (aunque aún me queda mucho por aprender).

Durante el segundo curso, que era sobre zsh, también descubrí lo que son las bindkeys. Básicamente, son un atajo de teclado que te permite realizar una acción en la shell. Se pueden enlazar con funciones, y ahí es donde yo le vi el encanto.

Un compañero de trabajo me había pasado unos días antes un fichero con la configuración de los hosts a los que nos solemos conectar trabajando en el día a día. La verdad es que, aunque súper útil, yo tendía a olvidar los nombres asignados a cada host y al final siempre tenía que hacer un cat para ver lo que había dentro del fichero de configs. Así que pensé que sería muy útil tener alguna forma de mostrar estos hosts y poderlos seleccionar directamente. Alguien me leyó la mente, porque me lo encontré hecho.

A continuación os muestro un pequeño script que copiaremos dentro del fichero de configuración de zsh .zshrc.

La primera parte es la función que recoge los hosts que hay dentro del fichero de configuración y muestra todos los nombres de forma interactiva. De forma que cuando se selecciona uno, se queda guardado en la variable “selected_host”.

La segunda parte es el binding. En este caso, esta función está enlazada con el atajo de teclado ctrl+h.

# Función que muestra los hosts de forma interactiva
_connect_ssh() {
	local selected_host=$(cat ~/.ssh/config | grep "Host " | grep -v "*" | awk '{print $2}' | fzf)
	LBUFFER="ssh $selected_host"
}

# Binding de las función previa
zle -N _connect_ssh
bindkey '^h' _connect_ssh

Una vez añadido al fichero .zshrc, iniciaremos una nueva sesión de la shell, y al teclear ctrl+h veremos lo siguiente:

Connect ssh script

La verdad es que este simple script me ha venido estupendamente. Lo uso en el día a día, además de otros.

Simplemente MARAVILLOSO 🙂