Snippets — Terminal
Herramientas y helpers para el día a día en la terminal. La mayoría viven en el .bashrc o .zshrc.
PS1 — Prompt personalizado
Funciones para enriquecer el prompt de la terminal mostrando la versión de Node activa (via .nvmrc) y la hora actual.
Mostrar versión de Node con .nvmrc
Si existe un archivo .nvmrc en el directorio actual, muestra la versión de Node configurada para ese proyecto.
Mostrar hora actual
PS1 completo
Combina usuario, host, carpeta, versión de Node y hora. Pegar en .bashrc o .zshrc.
# Custom prompt: usuario@host carpeta [ ⬢ vX.Y.Z ] HH:MM $
PS1='\[\e[1;32m\]\u@\h \[\e[1;34m\]\W\[\e[0m\]\[\e[1;33m\]$(nvmrc_node_prompt)\[\e[0m\] \[\e[1;36m\]$(current_time_prompt)\[\e[0m\]\$ '
Comandos útiles — Histrix
Creados por Pablo B. Suite de helpers para trabajar con proyectos y servidores Histrix desde la terminal usando fzf como selector interactivo.
Requisito
Todos los comandos dependen de fzf. Instalarlo con sudo apt install fzf antes de usar cualquiera de estos helpers.
Helpers base
Funciones internas que usan los demás comandos. Tienen que estar definidas antes que el resto.
# Selecciona un host del SSH config con fzf
get_ssh_host() {
grep -E '^Host ' ~/.ssh/config | awk '{print $2}' | fzf --height 40% --reverse --header="Seleccione Servidor"
}
# Ejecuta un comando en un servidor remoto y devuelve el resultado
remote_exec() {
local HOST=$1
local CMD=$2
ssh "$HOST" "bash -lc '$CMD'" 2>/dev/null
}
# Lee la variable HISTRIX_DATABASE_DIR del servidor remoto
get_remote_base_path() {
local HOST="$1"
ssh "$HOST" 'bash -lc "echo \$HISTRIX_DATABASE_DIR"' 2>/dev/null
}
# Navegador fzf para directorios, funciona local o remoto
# Uso: select_path "mi_host" "/ruta/inicio" ← remoto
# select_path "" "/ruta/inicio" ← local
select_path() {
local HOST=$1
local BASE=$2
if [ -z "$HOST" ]; then
ls -1 "$BASE" 2>/dev/null | fzf --height 40% --reverse --header="Seleccione en $BASE"
else
remote_exec "$HOST" "ls -1 $BASE" | fzf --height 40% --reverse --header="Seleccione en $HOST:$BASE"
fi
}
pro — Abrir proyecto local
Selecciona un proyecto del escritorio de trabajo y lo abre en VS Code con una terminal posicionada en esa carpeta.
pro() {
local BASE="/home/camila/Escritorio/Trabajo"
local DIR=$(select_path "" "$BASE")
if [ -n "$DIR" ]; then
code "$BASE/$DIR"
gnome-terminal --tab --working-directory="$BASE/$DIR"
fi
}
promodule — Abrir módulo de Histrix
Igual que pro pero apunta a los módulos de Histrix y abre con Antigravity en vez de VS Code.
promodule() {
local BASE="/usr/share/histrix/modules"
local DIR=$(select_path "" "$BASE")
if [ -n "$DIR" ]; then
antigravity "$BASE/$DIR"
gnome-terminal --tab --working-directory="$BASE/$DIR"
fi
}
proback — Abrir base de datos de Histrix
Abre un proyecto de la carpeta de bases de datos de Histrix en VS Code.
proback() {
local BASE="/usr/share/histrix/database"
local DIR=$(select_path "" "$BASE")
if [ -n "$DIR" ]; then
code "$BASE/$DIR"
gnome-terminal --tab --working-directory="$BASE/$DIR"
fi
}
log_tail — Ver logs locales en tiempo real
Navega la estructura de logs de Histrix (/database/cliente/log/año/mes) y hace tail -f del archivo elegido. Apunta automáticamente al mes actual.
log_tail() {
local BASE="/usr/share/histrix/database"
local CLIENT=$(select_path "" "$BASE")
[ -z "$CLIENT" ] && return
local YEAR=$(date +%Y)
local MONTH=$(date +%m)
local LOCAL_DIR="$BASE/$CLIENT/log/$YEAR/$MONTH"
if [ ! -d "$LOCAL_DIR" ]; then
echo "Error: No existen logs para el mes actual ($YEAR/$MONTH)"
echo "Ruta: $LOCAL_DIR"
return 1
fi
local FILE=$(select_path "" "$LOCAL_DIR")
[ -n "$FILE" ] && tail -f "$LOCAL_DIR/$FILE"
}
go_remote — Entrar a un servidor y navegar a un proyecto
Selecciona un servidor del SSH config, lee la variable HISTRIX_DATABASE_DIR del servidor y te deja parado en la carpeta del cliente elegido.
go_remote() {
local HOST=$(get_ssh_host)
[ -z "$HOST" ] && return
local R_BASE=$(get_remote_base_path "$HOST")
local CLIENT=$(select_path "$HOST" "$R_BASE")
ssh -t "$HOST" "cd $R_BASE/$CLIENT; bash --login"
}
host_stats — Ver estado de un servidor
Muestra disco, RAM y carga de CPU de un servidor remoto de un solo comando.
host_stats() {
local HOST=$(get_ssh_host)
[ -z "$HOST" ] && return
ssh "$HOST" "echo '--- DISCO ---'; df -h /; echo '--- RAM ---'; free -h; echo '--- CPU ---'; uptime"
}
log_remote_tail — Ver logs remotos en tiempo real
Igual que log_tail pero en un servidor remoto. Navega la estructura de logs y hace tail -f apuntando al mes actual.
log_remote_tail() {
local HOST=$(get_ssh_host)
[ -z "$HOST" ] && return
local R_BASE=$(get_remote_base_path "$HOST")
[ -z "$R_BASE" ] && return
local CLIENT=$(select_path "$HOST" "$R_BASE")
[ -z "$CLIENT" ] && return
local YEAR=$(date +%Y)
local MONTH=$(date +%m)
local REMOTE_DIR="$R_BASE/$CLIENT/log/$YEAR/$MONTH"
local FILE=$(select_path "$HOST" "$REMOTE_DIR")
if [ -z "$FILE" ]; then
echo "Error: No se encontraron logs para $YEAR/$MONTH en $HOST"
return 1
fi
echo "Haciendo tail -f en $HOST:$REMOTE_DIR/$FILE..."
ssh "$HOST" "tail -f $REMOTE_DIR/$FILE"
}
log_remote_download — Descargar un log remoto
Navega la estructura de logs de un servidor remoto con selección manual de año y mes, y descarga el archivo elegido al directorio actual via scp.
log_remote_download() {
local HOST=$(get_ssh_host)
[ -z "$HOST" ] && return
local R_BASE=$(get_remote_base_path "$HOST")
[ -z "$R_BASE" ] && return
local CLIENT=$(select_path "$HOST" "$R_BASE")
[ -z "$CLIENT" ] && return
local YEAR=$(select_path "$HOST" "$R_BASE/$CLIENT/log")
[ -z "$YEAR" ] && return
local MONTH=$(select_path "$HOST" "$R_BASE/$CLIENT/log/$YEAR")
[ -z "$MONTH" ] && return
local FILE=$(select_path "$HOST" "$R_BASE/$CLIENT/log/$YEAR/$MONTH")
[ -z "$FILE" ] && return
local FULL_PATH="$R_BASE/$CLIENT/log/$YEAR/$MONTH/$FILE"
echo "Descargando $FILE desde $HOST..."
scp "$HOST:$FULL_PATH" . && echo "¡Listo! Archivo guardado en el directorio actual."
}
Aliases
Shortcuts para los comandos más usados. Agregar al .bashrc o .zshrc junto con las funciones.