La shell de Linux nos da una serie de opciones para poder personalizar el modo de funcionamiento de la misma.

Estas opciones podemos visualizarlas ejecutando set -o. Utilizaremos set -o OPCION o set +o OPCION para activar o desactivar una opción respectivamente.

$ set -o
allexport      	off
braceexpand    	on
emacs          	on
errexit        	off
errtrace       	off
functrace      	off
hashall        	on
histexpand     	on
history        	on
ignoreeof      	off
interactive-comments	on
keyword        	off
monitor        	on
noclobber      	off
noexec         	off
noglob         	off
nolog          	off
notify         	off
nounset        	off
onecmd         	off
physical       	off
pipefail       	off
posix          	off
privileged     	off
verbose        	off
vi             	off
xtrace         	off

A continuación veremos alguna de las opciones indicadas.

history

El comando history muestra un histórico de los comandos que hemos introducido. Por norma general dicha opción viene activada, por lo que podremos ver las distintas órdenes que hemos ido introduciendo en la shell ejecutando el comando indicado con anterioridad, o incluso movernos entre el historial con las teclas destinadas a ello.

#Ejecutamos varios comandos de ejemplo
$ echo "prueba"
prueba
$ cd /
$ pwd
/
$ uname
Linux
$ history 5 #Mostramos los últimos cinco comandos ejecutados
  990  echo "prueba"
  991  cd /
  992  pwd
  993  uname
  994  history 5
$ 

Como se puede observar, podemos comprobar que tras ejecutar una serie de comandos podemos ver el histórico de los mismos. Por el contrario, si deshabilitamos la opción y lanzamos de nuevo dichos comandos de prueba, vamos a ver que a la hora de ver el histórico no quedan reflejados.

$ set +o history #Deshabilitamos el histórico
#Ejecutamos varios comandos de prueba
$ echo "prueba"
prueba
$ cd /
$ pwd
/
$ uname
Linux
$ history 5 #Mostramos los últimos cinco comandos ejecutados
  991  cd /
  992  pwd
  993  uname
  994  history 5
  995  set +o history #El último comando registrado corresponde a la desactivación del histórico

Como se puede observar, el último comando registrado corresponde al momento en el que deshabilitamos el historial, tras lo cual se dejan de registrar comandos en el fichero .bash_history

ignoreeof

Por norma general, ignoeeof viene deshabilitado por defecto. Esta opción permite en caso de que esté deshabilitada, lanzar un EOF (End Of File) con el atajo de teclado CTRL+D y  salir de la shell activa. Esto no afectará a la hora de lanzar un EOF a la hora de editar ficheros como veremos a continuación.

Podemos habilitar esta opción para que como su nombre indica, ignore este atajo de teclado y no se lance un EOF.

Con la opción deshabilitada, como se ha indicado, en caso de que estemos en una shell y pulsemos CTRL+D, finalizará la sesión. Esto es lo que ocurre cuando procedemos a habilitarla, y tratamos de ejecutar dicho atajo de teclado.

$ set -o ignoreeof
$ Use «logout» para salir de intérprete de ordenes. #Esta salida la devuelve tras pulsar CTRL+D

Como se puede observar no nos permite salir de la shell.

Por otro lado, como se indicó anteriormente no afecta al lanzamiento de EOF mientras estamos editando ficheros como vemos en el siguiente ejemplo.

$ cat > prueba
Esto es una prueba
donde vemos que al
hacer CTRL+D lanzamos
un EOF y el fichero se cierra
PULSAMOS!$
$
$ cat prueba
Esto es una prueba
donde vemos que al
hacer CTRL+D lanzamos
un EOF y el fichero se cierra
PULSAMOS!$
$ 

noclobber

Como se ha observado al inicio del post, la opción noclobber se encuentra deshabilitada por defecto, lo que provocará que en caso de realizar una redirección a un fichero existente, este se sobreescribirá sin pedir ningún tipo de confirmación.

$ touch prueba #Creamos fichero llamado prueba
$ ls prueba #Verificamos que se ha creado el fichero
prueba
$ cat prueba #Verificamos que está vacío
$ echo "Hola!" > prueba #Escribimos una cadena de texto en el fichero prueba y no pide confirmación
$ cat prueba #Verificamos que tras hacer un echo, el fichero se ha sobreescrito
Hola!

En cambio, vamos a ver lo que ocurre cuando activamos la opción noclobber.

$ set -o noclobber #Activamos la opción noclobber
$ touch prueba #Creamos fichero llamado prueba
$ ls prueba #Verificamos que se ha creado el fichero
prueba
$ cat prueba #Verificamos que está vacío
$ echo "Hola!" > prueba #Intentamos escribir una cadena de texto en el fichero prueba y no nos lo permite
-bash: prueba: cannot overwrite existing file
$ cat prueba #Verificamos que el fichero sigue vacío

Vemos que en este caso no podemos escribir en el fichero, lo cual es una interesante medida de protección ante accidentes, pero… ¿Cómo podemos forzar esta escritura? Sencillo, simplemente añadiremos un | tras el símbolo > de redirección. Lo vemos en el siguiente ejemplo.

$ echo "Hola!" >| prueba #Escribimos una cadena de texto en el fichero prueba forzando la redirección
$ cat prueba #Verificamos que tras hacer un echo con redirección forzada, el fichero se ha sobreescrito
Hola!

emacs y vi

Por norma general tendremos disponibles los comandos de emacs y vi en nuestra shell, podemos activar uno u otro con set -o al igual que el resto de opciones en función de con qué comandos nos sentimos mas cómodos. Por supuesto solo podemos tener activa una de las dos opciones.

$ set -o vi #Activamos los comandos de vi
$ set -o emacs #Activamos los comandos de emacs

xtrace

Esta opción nos permite activar el modo debug. En general nos será interesante cuando estemos introduciendo scripts en línea de comandos o si estamos “montando” algún entorno en la máquina y necesitamos ver con detalle qué es lo que ocurre “por detras”. Indicar que una vez se active esta opción, con cualquier comando que introduzcamos en la shell aparecerá el debug del mismo, por lo que será útil activar esta opción de manera puntual.

set -o xtrace #Activamos el modo debug

En caso de que únicamente necesitemos el debug en un script en concreto podemos añadir un set -x en el mismo.

En caso de que únicamente necesitemos el debug en un script en concreto podemos añadir un set -x en el mismo.