En los sistemas UNIX el shell es un programa informático que interpreta ordenes (Wikipedia), basado en la shell, se crea BASH por parte del proyecto GNU. Podemos verlo abriendo un emulador de terminal en sistemas GNU/Linux y Mac OS o directamente en un sistema sin entorno gráfico. Existen también maneras de emularlo en entornos Microsoft Windows, pero no es 100% nativo, aunque recientemente hay un proyecto que intenta llevar la consola bash de manera fácil al sistema botnet Microsoft Windows 10.
Al ser clon de la shell de UNIX, la mayoría de las aplicaciones son ejecutables tanto en BASH como en shell, tenemos acceso tanto a parámetros, funciones matemáticas, los conocidos operadores relacionales, redireccionamiento y otras funciones más.
Muchos de los comandos que se usan a diario son los conocidos man, cd, ls, rm, cp, mkdir, etc. Aunque existen decenas más para gestión de archivos, usuarios, procesos, incluso para acceso remoto y sistema y gestión de la red.
La terminal
Aqui es donde sucede la magia y donde podemos crear, modificar y explorar las opciones del bash. Existen tres ficheros en el directorio de usuario necesarios para BASH. Estos ficheros permiten al usuario configurar el entorno de su cuenta automáticamente cuando entra en el sistema, cuando arranca un subshell o ejecutar comandos cuando sale del sistema.
Los nombres de estos ficheros son Si ninguno de estos ficheros existe en el directorio del usuario, /etc/profile es utilizado por el sistema como fichero de configuracion de bash.
.bash_profile es el el mas importante de los tres. Es leido y los comandos incluidos en el, ejecutados, cada vez que el usuario entra en el sistema. Cualquier cambio hecho en este fichero no tendra efecto hasta que salgamos y entremos en el sistema de nuevo. Bash permite dos sinonimos para este fichero, .bash_login y .profile. Si .bash_profile no existe, el sistema buscara primero .bash_login y luego .profile. Solamente uno de estos ficheros es leido, en el caso que existan simultaneamente.
El fichero bashrc
Es leido cuando el usuario arranca un subshell, escribiendo por ejemplo bash en la linea de comandos. Esto nos permite ejecutar diferentes comandos para la entrada al sistema o para la ejecucion de un subshell.
1 2 3 4 5 6 7 8 9 |
# ~/.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 |
Si queremos configurar la cantidad de comandos que se almacenan en el historial, modificamos estas lineas:
1 2 3 |
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTSIZE=10 HISTFILESIZE=300 |
En este caso, si queremos habilitar los colores de la terminal solamente cambiamos force_color_prompt a yes:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 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 |
Estas lineas nos permiten jugar con la indicación del hostname y nombre de usuario, incluso sustituyendo el signo de dolar o el simbolo de arroba por otro de tu preferencia, también acepta cambiar colores:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[1;35m\]\u♡\h\[\033[00m\]\[\033[1;31m\]\w\[\033[00m\]∴ ' 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*) PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;; *) ;; esac |
Aqui una lista de los colores aceptados:
1 2 3 4 5 6 7 8 9 10 11 |
# COLORS: # # BLACK 0;30 DARK GREY 1;30 # RED 0;31 CLEAR RED 1;31 # GREEN 0;32 CLEAR GREEN 1;32 # BROWN 0;33 YELLOW 1;33 # BLUE 0;34 CLEAR BLUE 1;34 # PURPLE 0;35 PINK 1;35 # CYAN 0;36 CLEAR CYAN 1;36 # CLEAR GREY 0;37 WHITE 1;37 # |
Podemos cambiar y crear alias, es decir, atajos para comandos que usamos frecuentemente y nos ayudan a hacer más rápida alguna tarea:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Configura colores y comandos alias if [ -x /usr/bin/dircolors ]; then test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" alias ls='ls --color=auto' alias l='dir --color=auto' alias ll='ls -a --color=auto' alias miau='sudo apt-get update' #alias vdir='vdir --color=auto' #alias grep='grep --color=auto' #alias fgrep='fgrep --color=auto' #alias egrep='egrep --color=auto' fi |
Otra parte divertida y útil puede ser colorear las páginas de manual, solamente usando estas lineas y ampliamente configurables como desees:
1 2 3 4 5 6 7 8 9 10 11 |
man() { env \ LESS_TERMCAP_mb=$(printf "\e[1;35m") \ LESS_TERMCAP_md=$(printf "\e[1;35m") \ LESS_TERMCAP_me=$(printf "\e[0m") \ LESS_TERMCAP_se=$(printf "\e[0m") \ LESS_TERMCAP_so=$(printf "\e[1;44;33m") \ LESS_TERMCAP_ue=$(printf "\e[0m") \ LESS_TERMCAP_us=$(printf "\e[1;31m") \ man "$@" } |
Si bien la terminal con BASH o shell no acepta la cantidad de plug-ins y nuevas caracteristicas como la fantástica ZSH, es una buena manera de conocer una de las partes más importantes en un sistema tipo UNIX, asi que espero que sea útil y nos den ganas de explorar más por las herramientas que podemos encontrar en nuestros sistemas GNU/Linux y tipo UNIX.