Saltar a contenido

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.

nvmrc_node_prompt() {
  if [ -f .nvmrc ]; then
    echo -n " ⬢ $(cat .nvmrc)"
  fi
}

Mostrar hora actual

current_time_prompt() {
  echo -n " $(date +%H:%M:%S)"
}

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.

alias logtr='log_remote_tail'
alias logdr='log_remote_download'
alias gost='go_remote'
alias hs='host_stats'