Más sobre el sistema Linux y sobre Bash

En un sistema Linux, hay varios scripts y archivos escritos en Bash que se utilizan para diversas tareas de configuración y automatización. Aquí tienes una lista de algunos de los archivos y scripts más comunes, junto con una breve explicación de su propósito:

Archivos de Configuración y Scripts Comunes en Bash:

  1. ~/.bashrc:
    • Ubicación: Directorio de inicio del usuario.
    • Propósito: Configura el entorno del usuario cuando se abre una nueva terminal interactiva. Aquí puedes definir alias, funciones y variables de entorno.
  2. ~/.bash_profile o ~/.profile:
    • Ubicación: Directorio de inicio del usuario.
    • Propósito: Se ejecuta al iniciar una sesión de login. Se usa para configurar el entorno del usuario, establecer variables de entorno y ejecutar scripts al inicio de sesión.
  3. /etc/bash.bashrc:
    • Ubicación: Sistema global.
    • Propósito: Archivo de configuración que se aplica a todos los usuarios. Se ejecuta cada vez que un usuario abre una nueva terminal interactiva.
  4. /etc/profile:
    • Ubicación: Sistema global.
    • Propósito: Se ejecuta al iniciar una sesión de login para todos los usuarios. Configura el entorno y aplica ajustes globales para todas las sesiones de usuario.
  5. /etc/profile.d/:
    • Ubicación: Sistema global.
    • Propósito: Contiene scripts adicionales que se ejecutan al iniciar una sesión de login. Permite modularizar configuraciones globales en múltiples archivos.
  6. ~/.bash_logout:
    • Ubicación: Directorio de inicio del usuario.
    • Propósito: Se ejecuta cuando un usuario cierra una sesión de login. Se usa para realizar tareas de limpieza al salir, como borrar archivos temporales.
  7. /etc/rc.local:
    • Ubicación: Sistema global.
    • Propósito: Archivo de script que se ejecuta al final del proceso de arranque del sistema. Se utiliza para ejecutar comandos y scripts específicos al inicio del sistema.
  8. /etc/init.d/:
    • Ubicación: Sistema global.
    • Propósito: Contiene scripts de inicio y parada de servicios del sistema. Los scripts aquí son utilizados por el sistema init para administrar servicios y demonios.
  9. /etc/crontab:
    • Ubicación: Sistema global.
    • Propósito: Archivo de configuración para tareas programadas (cron jobs). Permite especificar comandos o scripts que deben ejecutarse en momentos específicos.
  10. /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/:
    • Ubicación: Sistema global.
    • Propósito: Directorios que contienen scripts que se ejecutan diariamente, semanalmente o mensualmente mediante el servicio cron.

Ejemplo de Uso:

Para añadir un alias en el archivo ~/.bashrc, podrías añadir la siguiente línea:

bash

alias ll='ls -lah'

Esto define el alias ll para ejecutar ls -lah, que lista los archivos en un formato largo y detallado, incluyendo archivos ocultos.

Estos son algunos de los archivos y scripts más comunes escritos en Bash en un sistema Linux. Cada uno juega un papel importante en la configuración y automatización del sistema, permitiendo tanto a usuarios como a administradores personalizar su entorno y realizar tareas repetitivas de manera eficiente.

~/.bashrc:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

# The following block is surrounded by two delimiters.
# These delimiters must not be modified. Thanks.
# START KALI CONFIG VARIABLES
PROMPT_ALTERNATIVE=twoline
NEWLINE_BEFORE_PROMPT=yes
# STOP KALI CONFIG VARIABLES

if [ "$color_prompt" = yes ]; then
    # override default virtualenv indicator in prompt
    VIRTUAL_ENV_DISABLE_PROMPT=1

    prompt_color='\[\033[;32m\]'
    info_color='\[\033[1;34m\]'
    prompt_symbol=㉿
    if [ "$EUID" -eq 0 ]; then # Change prompt colors for root user
        prompt_color='\[\033[;94m\]'
        info_color='\[\033[1;31m\]'
        # Skull emoji for root terminal
        #prompt_symbol=💀
    fi
    case "$PROMPT_ALTERNATIVE" in
        twoline)
            PS1=$prompt_color'┌──${debian_chroot:+($debian_chroot)──}${VIRTUAL_ENV:+(\[\033[0;1m\]$(basename $VIRTUAL_ENV)'$prompt_color')}('$info_color'\u'$prompt_symbol'\h'$prompt_color')-[\[\033[0;1m\]\w'$prompt_color']\n'$prompt_color'└─'$info_color'\$\[\033[0m\] ';;
        oneline)
            PS1='${VIRTUAL_ENV:+($(basename $VIRTUAL_ENV)) }${debian_chroot:+($debian_chroot)}'$info_color'\u@\h\[\033[00m\]:'$prompt_color'\[\033[01m\]\w\[\033[00m\]\$ ';;
        backtrack)
            PS1='${VIRTUAL_ENV:+($(basename $VIRTUAL_ENV)) }${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ';;
    esac
    unset prompt_color
    unset info_color
    unset prompt_symbol
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*|Eterm|aterm|kterm|gnome*|alacritty)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

[ "$NEWLINE_BEFORE_PROMPT" = yes ] && PROMPT_COMMAND="PROMPT_COMMAND=echo"

# enable color support of ls, less and man, and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    export LS_COLORS="$LS_COLORS:ow=30;44:" # fix ls color for folders with 777 permissions

    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
    alias diff='diff --color=auto'
    alias ip='ip --color=auto'

    export LESS_TERMCAP_mb=$'\E[1;31m'     # begin blink
    export LESS_TERMCAP_md=$'\E[1;36m'     # begin bold
    export LESS_TERMCAP_me=$'\E[0m'        # reset bold/blink
    export LESS_TERMCAP_so=$'\E[01;33m'    # begin reverse video
    export LESS_TERMCAP_se=$'\E[0m'        # reset reverse video
    export LESS_TERMCAP_us=$'\E[1;32m'     # begin underline
    export LESS_TERMCAP_ue=$'\E[0m'        # reset underline
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'



# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Desglosando y explicando el contenido de .bashrc:

Vamos a desglosar y explicar el contenido de tu archivo .bashrc paso a paso:

Introducción

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) for examples

Este archivo es ejecutado por bash para shells no interactivos (cuando no inicias sesión directamente).

No hacer nada si no es interactivo

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Este bloque verifica si el shell es interactivo (contiene ‘i’ en -). Si no es interactivo, sale del script.

Vamos a desglosar estos conceptos para que queden claros.

Shell Interactivo vs. Shell No Interactivo

Shell Interactivo

  • Definición: Un shell interactivo es aquel en el que un usuario está directamente ingresando comandos y esperando respuestas. Se inicia cuando abres una terminal y comienza una sesión en la que puedes escribir y ejecutar comandos manualmente.
  • Características: Permite la entrada de comandos del usuario, muestra resultados y generalmente incluye un prompt (como $ o #).

Shell No Interactivo

  • Definición: Un shell no interactivo se utiliza normalmente para ejecutar scripts o comandos automatizados sin intervención directa del usuario. No espera a que el usuario ingrese comandos manualmente.
  • Características: Ejecuta un script o un conjunto de comandos y luego termina sin necesidad de entrada del usuario.

Estructura de Control case

La estructura de control case en Bash es similar a switch en otros lenguajes de programación. Permite la ejecución de diferentes bloques de código según el valor de una variable.

Ejemplo y Explicación

case $- in
    *i*) ;;
      *) return;;
esac
  • $-: Es una variable especial que contiene las opciones actuales del shell. Si el shell es interactivo, esta variable incluirá la letra i.
  • *i*: Es un patrón de búsqueda que significa «cualquier cosa que contenga i«. Específicamente, busca si i está presente en las opciones del shell.
  • ;;: Finaliza una opción en case.
  • *) return;;: *) significa «cualquier cosa que no coincida con los patrones anteriores». Si $- no contiene i, ejecuta return, lo que causa que el script termine inmediatamente.

¿Cómo Verifica si el Shell es Interactivo?

El bloque case está verificando si la opción i está presente en la variable $-. Si i está presente, el shell es interactivo y no hace nada (;;). Si i no está presente, significa que el shell no es interactivo y el script debe terminar (return).

Resumen

  • Shell Interactivo: Ingresas comandos manualmente.
  • Shell No Interactivo: Ejecuta scripts sin intervención manual.
  • Estructura case:
    • Verifica si el shell es interactivo buscando i en $-.
    • Si es interactivo, no hace nada.
    • Si no es interactivo, termina el script.
$ echo $-
himBHs

La variable especial $- contiene un conjunto de indicadores que describen el estado del shell y las opciones que están habilitadas. Cada letra en la cadena tiene un significado específico:

  • h: Habilita el historial (history).
  • i: Indica que el shell es interactivo.
  • m: Habilita el monitoreo de tareas (job control).
  • B: Permite el uso de brace expansion.
  • H: Habilita la búsqueda en el historial (history expansion).
  • s: Indica que el shell está leyendo comandos de un script (cuando se usa con -s).

Cuando $- No Contendría i

Para que la variable $- no contenga la letra i, el shell debe ser no interactivo. Esto ocurre típicamente cuando se ejecutan scripts en lugar de ingresar comandos directamente en una terminal. Aquí hay algunos ejemplos de situaciones en las que $- no contendría i:

  1. Ejecución de Scripts: Si ejecutas un script Bash, el shell que se inicia para ejecutar ese script es no interactivo.
./mi_script.sh

2. Comandos Pasados Directamente al Shell: Si ejecutas un comando directamente en el shell sin iniciar una sesión interactiva.

bash -c 'echo $-'

Cuando inicias un terminal en un sistema basado en Unix/Linux, generalmente estás utilizando Bash sin opciones explícitas. Esto significa que Bash está funcionando con sus configuraciones predeterminadas. Vamos a desglosar lo que esto significa y cómo funciona:

Bash sin Opciones Explícitas

Shell Interactivo por Defecto

Al abrir una terminal y escribir comandos directamente, estás utilizando un shell interactivo. Aquí están algunos aspectos clave de este modo:

  1. Lectura de Archivos de Inicio:
    • ~/.bashrc: Si es un shell interactivo no de login (como una terminal gráfica), Bash leerá este archivo para cargar configuraciones y funciones definidas por el usuario.
    • /etc/bash.bashrc: Este archivo global también puede ser leído, dependiendo de la configuración de tu sistema.
    • ~/.bash_profile, ~/.bash_login, ~/.profile: Si es un shell de login (cuando inicias sesión en modo texto, por ejemplo), estos archivos se leen en lugar de ~/.bashrc.
  2. Comportamiento Predeterminado:
    • Historial de comandos: Se almacena en ~/.bash_history.
    • Variables de entorno: Se cargan desde los archivos mencionados anteriormente.
    • Alias y funciones: Definidos en los archivos de configuración del usuario.

Opciones y Parámetros de Bash

Cuando inicias un shell interactivo sin opciones específicas, Bash asume sus configuraciones predeterminadas:

  • Interactividad: El shell espera y procesa comandos del usuario.
  • Historial: Registra los comandos en el archivo de historial.
  • Prompt: Muestra un prompt (como $) esperando la entrada del usuario.

Comando bash sin Opciones

Cuando ejecutas el comando bash sin ningún parámetro, simplemente inicias una nueva instancia de Bash con sus configuraciones predeterminadas. Ejemplo:

bash

Esto iniciará un nuevo shell interactivo. Puedes verificar esto escribiendo exit para salir del nuevo shell y regresar al shell original.

Parámetros y Opciones de Bash

Además de -c, aquí hay un resumen de algunas otras opciones útiles de Bash:

OpciónDescripción
-lInicia un shell de login
-iInicia un shell interactivo
-sLee comandos desde la entrada estándar
--versionMuestra la versión de Bash
--helpMuestra una ayuda corta con las opciones disponibles
-nRevisa la sintaxis del script sin ejecutarlo
-vMuestra cada línea del script mientras se lee
-xMuestra cada comando y sus argumentos mientras se ejecutan

Resumen

  • Shell Interactivo: Por defecto, al abrir una terminal, usas Bash sin opciones explícitas.
  • Archivos de Inicio: Bash lee archivos como ~/.bashrc y ~/.bash_profile para cargar configuraciones.
  • Configuraciones Predeterminadas: Incluyen el manejo del historial, variables de entorno, alias, y prompt.
  • Iniciar Bash sin Opciones: Simplemente ejecuta bash para iniciar una nueva instancia del shell con configuraciones predeterminadas.

Estas configuraciones aseguran que tengas una experiencia de usuario coherente y predecible al trabajar en la línea de comandos de Bash.

Configuración del historial

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

HISTCONTROL=ignoreboth: No guarda líneas duplicadas o que comiencen con espacio en el historial.

shopt -s histappend: Añade al archivo de historial en lugar de sobrescribirlo.

HISTSIZE=1000 y HISTFILESIZE=2000: Establecen el tamaño del historial en 1000 comandos y el archivo de historial en 2000 líneas.

Vamos a profundizar en la configuración del historial en Bash, específicamente la variable HISTCONTROL y cómo afecta al historial de comandos.

HISTCONTROL y sus Valores

La variable HISTCONTROL controla cómo se manejan ciertos tipos de comandos en el historial. Vamos a desglosar sus valores y efectos.

ignoreboth

HISTCONTROL=ignoreboth
  • Efecto: Equivale a combinar ignoredups y ignorespace.
    • ignoredups: Evita guardar líneas duplicadas consecutivas en el historial.
    • ignorespace: No guarda en el historial las líneas que comienzan con un espacio.
  • Resultado: Con ignoreboth, el historial no guardará comandos duplicados consecutivos ni comandos que comiencen con un espacio.

Otros Valores de HISTCONTROL

  1. ignoredups
HISTCONTROL=ignoredups

2. ignorespace

HISTCONTROL=ignorespace

3. ignoreboth

HISTCONTROL=ignoreboth

4. erasedups

HISTCONTROL=erasedups

Efecto: Si ingresas un comando que ya existe en el historial, elimina la entrada anterior y guarda el comando en la posición más reciente.

Resultado: Solo la última instancia de un comando estará en el historial, eliminando cualquier duplicado anterior.

Ejemplos Prácticos

Usando ignoredups

HISTCONTROL=ignoredups
echo "Hello"
echo "Hello"
history
  • Historial: Solo aparecerá una línea con echo "Hello".

Usando ignorespace

HISTCONTROL=ignorespace
 echo "This will not be saved"
history
  • Historial: La línea con echo "This will not be saved" no se guarda porque comienza con un espacio.

Usando ignoreboth

HISTCONTROL=ignoreboth
 echo "Not saved"
echo "Saved"
echo "Saved"
history
  • Historial: echo "Not saved" no se guarda y solo una instancia de echo "Saved" aparece en el historial.

Usando erasedups

HISTCONTROL=erasedups
echo "Repeat"
echo "Repeat"
history
  • Historial: Solo la última línea de echo "Repeat" se guarda en el historial.

Resumen

  • ignoredups: Evita duplicados consecutivos.
  • ignorespace: Ignora líneas que comienzan con un espacio.
  • ignoreboth: Combina ignoredups y ignorespace.
  • erasedups: Elimina duplicados anteriores y mantiene solo la última instancia.

El archivo de historial, generalmente llamado .bash_history, contiene los comandos ejecutados en la terminal y es controlado por estas configuraciones. Modificando HISTCONTROL, puedes personalizar cómo se maneja tu historial de comandos para mejorar tu experiencia en la línea de comandos.

El comportamiento del historial en Bash es controlado internamente por el propio shell. Bash está diseñado para observar el valor de la variable HISTCONTROL y ajustar su comportamiento en consecuencia. Cuando cambias el valor de HISTCONTROL, le estás dando instrucciones al shell sobre cómo debe manejar ciertos tipos de entradas de comando en el historial.

Mecanismo Interno

  1. Monitoreo del Historial:
    • Bash tiene un mecanismo interno que monitorea cada comando ingresado por el usuario. Después de la ejecución de cada comando, este mecanismo determina si el comando debe ser guardado en el historial.
  2. Revisión del Valor de HISTCONTROL:
    • Inmediatamente después de la ejecución de un comando, Bash revisa el valor de HISTCONTROL para decidir si debe guardar o no el comando en el historial. Dependiendo de los valores asignados a HISTCONTROL (ignoredups, ignorespace, etc.), el shell aplica las reglas pertinentes.
  3. Aplicación de las Reglas de HISTCONTROL:
    • ignoredups: Si esta opción está activa, Bash verifica si el comando ingresado es idéntico al último comando guardado en el historial. Si es así, no guarda el comando duplicado.
    • ignorespace: Si esta opción está activa, Bash revisa si el comando ingresado comienza con un espacio. Si es así, omite guardar el comando en el historial.
    • ignoreboth: Combina las reglas de ignoredups y ignorespace.
    • erasedups: Si esta opción está activa, Bash busca el comando ingresado en el historial. Si ya existe, elimina la entrada anterior y guarda el comando como la entrada más reciente.
  4. Guardado en el Archivo de Historial:
    • Una vez que Bash ha decidido si debe guardar o no un comando basado en HISTCONTROL, actualiza el archivo de historial (.bash_history), si corresponde, aplicando las reglas configuradas.

Ejemplo de Funcionamiento Interno

Imaginemos que tienes la siguiente configuración en tu .bashrc:

HISTCONTROL=ignoreboth
  1. Ingresas un Comando:
ls -l
  1. Bash Revisa HISTCONTROL:
    • Verifica ignoreboth y determina que no debe guardar comandos duplicados consecutivos ni comandos que comiencen con espacio.
  2. Aplicación de Reglas:
    • No duplicados: Si el comando ls -l fue el último comando ingresado, no lo guarda de nuevo.
    • No espacio: Si el comando no comienza con un espacio, puede ser guardado (si no es duplicado).
  3. Guardar en el Historial:
    • Si pasa las verificaciones anteriores, ls -l se guarda en el archivo .bash_history.

Resumen

  • Bash monitorea cada comando y revisa HISTCONTROL después de la ejecución de cada comando.
  • Reglas de HISTCONTROL: ignoredups, ignorespace, ignoreboth, y erasedups dictan cómo se maneja el historial.
  • Proceso de verificación: Bash aplica las reglas configuradas antes de guardar el comando en el historial.

Así, cambiando el valor de HISTCONTROL, le dices a Bash cómo quieres que maneje el historial, aplicando estas reglas cada vez que ingresas un comando.

Comando shopt en Bash

El comando shopt en Bash se utiliza para habilitar o deshabilitar varias opciones del shell. Este comando permite ajustar el comportamiento de Bash a través de diferentes opciones. Aquí tienes una explicación más detallada sobre cómo funciona y qué opciones puedes configurar.

Sintaxis Básica de shopt

  • Habilitar una opción:
shopt -s opción

El parámetro -s habilita la opción especificada.

  • Deshabilitar una opción:
shopt -u opción
  • El parámetro -u deshabilita la opción especificada.

Opción histappend

shopt -s histappend

  • Función: Cuando habilitas histappend con shopt -s histappend, le indicas a Bash que debe añadir (append) los nuevos comandos al archivo de historial (.bash_history) en lugar de sobrescribirlo.
  • Uso:
shopt -s histappend
  • Sin esta opción: Si histappend no está habilitado, cada vez que inicias una nueva sesión de shell, los comandos de la sesión anterior pueden ser sobrescritos en el archivo de historial.

Otras Opciones de shopt

shopt tiene muchas opciones útiles que puedes habilitar o deshabilitar para personalizar el comportamiento de tu shell. Aquí tienes algunas opciones comunes y sus descripciones:

  1. checkwinsize:
    • Función: Ajusta automáticamente los valores de LINES y COLUMNS después de cada comando para reflejar el tamaño actual de la ventana del terminal.
    • Habilitar:
shopt -s checkwinsize

2. dotglob:

  • Función: Incluye archivos y directorios que comienzan con un punto (.) en el proceso de globbing.
  • Habilitar:
shopt -s dotglob

3. extglob:

  • Función: Habilita globbing extendido, permitiendo patrones complejos en coincidencias de nombres de archivos.
  • Habilitar:
shopt -s extglob

4. nullglob:

  • Función: Hace que los patrones de globbing que no coinciden con ningún archivo se expandan a una cadena vacía en lugar de ellos mismos.
  • Habilitar:
shopt -s nullglob

5. nocaseglob:

  • Función: Hace que el globbing no distinga entre mayúsculas y minúsculas.
  • Habilitar:
shopt -s nocaseglob

6. cdspell:

  • Función: Corrige errores tipográficos menores en los nombres de directorios en los comandos cd.
  • Habilitar:
shopt -s cdspell

7. globstar:

  • Función: Habilita la coincidencia del patrón ** para que coincida con cualquier número de directorios y subdirectorios en una expansión de nombre de ruta.
  • Habilitar:
shopt -s globstar

Ejemplo Completo

Aquí hay un ejemplo de cómo puedes usar shopt para habilitar varias opciones:

shopt -s histappend
shopt -s checkwinsize
shopt -s dotglob
shopt -s extglob
shopt -s nullglob
shopt -s nocaseglob
shopt -s cdspell
shopt -s globstar

Resumen

  • shopt -s: Habilita una opción del shell.
  • shopt -u: Deshabilita una opción del shell.
  • histappend: Añade comandos al historial en lugar de sobrescribirlo.
  • Otras opciones útiles: checkwinsize, dotglob, extglob, nullglob, nocaseglob, cdspell, globstar.

Estas opciones permiten personalizar el comportamiento de Bash para adaptarse mejor a tus necesidades.

Las opciones que habilita el comando shopt son configuraciones internas del shell Bash que controlan su comportamiento. No son scripts ni funciones independientes, sino que son características internas que Bash puede habilitar o deshabilitar según sea necesario. Aquí te explico cómo funcionan y dónde se encuentran:

Opciones Internas de Bash

  1. Configuraciones Internas: Las opciones que shopt habilita o deshabilita son configuraciones internas del intérprete de comandos Bash. Están codificadas dentro del propio código fuente de Bash.
  2. Control del Comportamiento: Estas opciones permiten a los usuarios personalizar y ajustar el comportamiento del shell para satisfacer diferentes necesidades y preferencias. Cada opción de shopt se refiere a una funcionalidad específica que Bash puede manejar de manera diferente cuando está activada o desactivada.

Dónde se Configuran

  1. Código Fuente de Bash: Las definiciones de estas opciones están en el código fuente de Bash. Cuando instalas Bash, estas opciones ya están disponibles como parte del intérprete de comandos.
  2. Archivos de Configuración del Usuario: Los usuarios pueden habilitar o deshabilitar estas opciones en sus archivos de configuración, como .bashrc o .bash_profile, utilizando el comando shopt.

Ejemplo de Configuración en .bashrc

# Habilitar histappend para añadir al historial en lugar de sobrescribir
shopt -s histappend

# Ajustar el tamaño de la ventana automáticamente
shopt -s checkwinsize

# Incluir archivos y directorios que comienzan con un punto en el globbing
shopt -s dotglob

# Habilitar globbing extendido
shopt -s extglob

# Hacer que los patrones de globbing que no coinciden se expandan a una cadena vacía
shopt -s nullglob

# Hacer que el globbing no distinga entre mayúsculas y minúsculas
shopt -s nocaseglob

# Corregir errores tipográficos menores en los nombres de directorios en los comandos cd
shopt -s cdspell

# Habilitar el globbing de doble asterisco (**)
shopt -s globstar

Consultar las Opciones Disponibles

Puedes listar todas las opciones disponibles de shopt y ver su estado actual (habilitado o deshabilitado) utilizando el comando sin argumentos:

shopt

O para ver solo las opciones habilitadas:

shopt -s

Documentación

La documentación oficial de Bash, que viene con el paquete o se puede acceder en línea, describe todas estas opciones en detalle. Puedes consultar la página del manual (man bash) para obtener información específica sobre cada opción de shopt.

man bash

Busca la sección sobre shopt y las opciones que se pueden configurar para obtener una descripción más técnica y detallada.

Resumen

  • Opciones de shopt: Son configuraciones internas de Bash que controlan su comportamiento.
  • No son scripts ni funciones: Están codificadas en el propio Bash y se pueden habilitar o deshabilitar con shopt.
  • Configuración: Los usuarios configuran estas opciones en sus archivos de configuración como .bashrc.
  • Consulta de opciones: Usa shopt para listar y ver el estado de las opciones.

Estas opciones permiten personalizar y ajustar la experiencia del usuario en la línea de comandos de Bash.

Tamaño de la ventana y expansión de globos

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

shopt -s checkwinsize: Ajusta el tamaño de la ventana después de cada comando.

#shopt -s globstar: Si se activa (descomentando), permite el uso de ** para coincidir con directorios y subdirectorios.

Tamaño de la Ventana (checkwinsize)

¿Qué significa el tamaño de la ventana?

El tamaño de la ventana se refiere a las dimensiones de tu terminal en términos de filas (líneas) y columnas (caracteres por línea). Cuando cambias el tamaño de tu ventana de terminal, el sistema necesita ajustar los valores de estas dimensiones para que los comandos y la salida se rendericen correctamente.

¿Por qué ajustar el tamaño de la ventana después de cada comando?

La opción checkwinsize ajusta automáticamente las variables LINES y COLUMNS después de cada comando para reflejar el tamaño actual de la ventana del terminal. Esto es útil porque, sin esta opción, si cambias el tamaño de tu ventana (por ejemplo, al redimensionar la terminal), los valores de LINES y COLUMNS no se actualizan automáticamente, lo que puede causar problemas de visualización.

Activar checkwinsize

shopt -s checkwinsize

Con esta opción habilitada, Bash verificará el tamaño de la ventana después de cada comando y actualizará las variables LINES y COLUMNS en consecuencia.

Expansión de Globos (globstar)

¿Qué es la expansión de globos?

La expansión de globos (globbing) en Bash se refiere al uso de caracteres comodín para coincidir con nombres de archivos y directorios. Los caracteres comodín más comunes son * (que coincide con cero o más caracteres) y ? (que coincide con un solo carácter).

¿Qué hace globstar?

Cuando activas la opción globstar, Bash permite el uso del patrón ** en una expansión de globos. Este patrón coincide recursivamente con todos los archivos y directorios en el árbol de directorios.

Ejemplo de Uso de globstar

  1. Sin globstar:
ls *

Esto listará todos los archivos y directorios en el directorio actual, pero no recursivamente.

2. Con globstar:

shopt -s globstar
ls **
  1. Esto listará todos los archivos y directorios en el directorio actual y en todos los subdirectorios, recursivamente.

Activar globstar

shopt -s globstar

Ejemplo de Uso Práctico

Supongamos que tienes una estructura de directorios como esta:

/mi_directorio
    /subdir1
        archivo1.txt
    /subdir2
        archivo2.txt

Sin globstar:

ls *

Esto listará solo los archivos y directorios en mi_directorio, pero no entrará en subdir1 o subdir2.

Con globstar:

ls **
  • Esto listará archivo1.txt y archivo2.txt también, porque está buscando recursivamente en todos los subdirectorios.

Resumen

  • checkwinsize: Ajusta automáticamente los valores de LINES y COLUMNS después de cada comando para reflejar el tamaño actual de la ventana del terminal.
    • Activar: shopt -s checkwinsize
  • globstar: Permite el uso del patrón ** en la expansión de globos para coincidir recursivamente con todos los archivos y directorios en el árbol de directorios.
    • Activar: shopt -s globstar

Verificar si globstar está activado actualmente en tu shell Bash. Puedes usar el comando shopt para listar todas las opciones del shell y ver su estado actual. Aquí te muestro cómo hacerlo:

Verificar el Estado de globstar

Usando shopt

shopt globstar

Este comando mostrará si globstar está habilitado (on) o deshabilitado (off).

Ejemplo de Salida

globstar     on

o

globstar     off

Esta salida te indicará si la opción globstar está actualmente activada o no.

Verificar Todas las Opciones de shopt

Si deseas ver el estado de todas las opciones del shell, puedes usar shopt sin argumentos:

shopt

Esto mostrará una lista completa de todas las opciones y sus estados (on/off).

Comprobación en un Script

Si estás escribiendo un script y necesitas comprobar si globstar está habilitado, puedes hacerlo de la siguiente manera:

if shopt -q globstar; then
    echo "globstar está habilitado"
else
    echo "globstar no está habilitado"
fi

Resumen

  • Para verificar una sola opción: shopt globstar
  • Para listar todas las opciones: shopt
  • Para usar en un script:

Estos métodos te permitirán verificar si globstar (o cualquier otra opción de shopt) está activado en tu shell Bash.

Resumen del archivo .bashrc

  1. Verifica si el shell es interactivo y sale si no lo es.
  2. Configura el historial de comandos, incluyendo cómo se almacenan y su tamaño.
  3. Ajusta el tamaño de la ventana después de cada comando.
  4. Configura el prompt (PS1), incluyendo colores y formato según las capacidades de la terminal.
  5. Configura el título de la ventana del terminal.
  6. Define aliases para comandos comunes como ls, grep, diff, etc., y habilita el soporte de colores.
  7. Incluye alias adicionales desde el archivo ~/.bash_aliases si existe.
  8. Habilita características de autocompletado programable si los archivos necesarios existen.
  9. Carga NVM y su autocompletado si están instalados.

Este archivo .bashrc está bien configurado para mejorar la experiencia en la línea de comandos con funcionalidades adicionales, colores, y una personalización del prompt para hacer el uso del terminal más eficiente y agradable.

Publicaciones Similares

Deja una respuesta

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