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.