Usar set y unset en Linux: gestionar variables y funciones del shell
El comando set muestra una lista de todas las variables locales, variables ambientales y funciones del shell.
Algunas opciones del comando set alteran el comportamiento de bash, a saber:
- -C Previenen que la salida de un programa usando `>’, `>&’ y `<>’ reescriba archivos. Hace lo mismo que la opción -o noclobber
- -n Lee los comandos, pero no los ejecuta. Útil para revisar scripts. Hace lo mismo que la opción -o noexec
- -P Prohíbe que el shell siga enlaces si Para no permitir que un archivo sea reescrito con el redireccionador ">"mbólicos. Hace lo mismo que la opción -o physical
- -a Marca las variables modificadas o creadas para export. Hace lo mismo que la opción -o allexport
- -o history Habilita guardar el historial de comandos escritos.
- -x Muestra el comando escrito y su resultado
- -m Habilita el control de Tareas (Jobs)
- -e Sale del shell tan pronto como el comando ejecutado termine con éxito
- -n Lee los comandos, pero no los ejecuta. Hace lo mismo que la opción -o noexec
- -f Deshabilita el uso de comodines * y ?. Hace lo mismo que la opción -o noglob
Al utilizar las opciones del set, el símbolo + puede ser utilizado para deshabilitar las opciones.
Este comando además de servir para listar todas las variables, puede alterar el comportamiento de bash.
Vea los ejemplos:
Listar las variables:
$ set
BASH=/bin/bash
BASH_VERSION='4.2.46(2)-release'
HISTCONTROL=ignoredups
HISTFILE=/home/ec2-user/.bash_history
No Clobber (no sobrescribir)
Para no permitir que un archivo sea reescrito con el redireccionador ">""
$ set -C$ cat teste.c > texto-bash: texto: cannot overwrite existing file
Imprimir lo que se escriba
Para imprimir el comando escrito y su resultado:
$ set -x$ echo $TERM+ echo xterm-256colorxterm-256color
Para deshabilitar esto, podemos usar la opción con el +x:
$ set +x
Sin History
Para evitar que los comandos escritos sean guardados en el history, podemos usar la opción +o history:
$ set +o history
Para volver a guardar los comandos escritos en el history:
$ set -o history
Observe el truco: algunas opciones se activan con "-" y otras se desactivan con "+" antes de la opción.
No glob (sin comodines)
Para evitar que Bash haga uso de comodines, se puede usar la opción -f o -o noglob:
$ ls /bin/zip*/bin/zip /bin/zipcloak /bin/zipgrep /bin/zipinfo /bin/zipnote /bin/zipsplit$ set -f$ ls /bin/zip*ls: não é possível acessar /bin/zip*: No such file or directory
Es casi seguro que las opciones -C (noclobber) y -f (noglob) serán preguntas de examen en el LPI.
Es importante que sepa que las opciones que alteran el comportamiento del comando set no son permanentes si no están en algún script de inicio de bash. Algunas distribuciones personalizan el comportamiento del shell con el comando set en los archivos /etc/profile o /etc/bashrc.
Comando unset
El comando unset borra una variable ambiental de la memoria.
Ej.:
$ LIVRO="Certificação Linux"
$ echo $LIVRO
Certificação Linux
$ unset LIVRO
$ echo $LIVRO
Comando printenv
El comando printenv imprime las variables ambientales.
Como parámetro puede recibir el nombre de una variable.
Ejemplo:
$ printenv PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/bin
Si no se ingresa ningún parámetro, imprime todas las variables ambientales.
Solamente las variables exportadas con el comando export son impresas por printenv.
Vea el ejemplo:
$ BOOK="Certificação CompTIA Linux"$ printenv BOOK
Si la variable BOOK es exportada:
$ export BOOK$ printenv BOOKCertificação CompTIA Linux
Comando export
El comando export sirve para exportar las variables creadas a todos los procesos hijos del Bash (programas).
Esta exportación es para un área de memoria especial compartida entre el Bash y los programas que el Shell ejecuta.
Si no se ingresa una variable o función como parámetro, muestra todas las variables exportadas. También puede ser usado para crear una variable y exportarla al mismo tiempo.
Una variable creada en bash sin ser exportada no puede ser leída por ningún proceso o programa ejecutado en la misma terminal o sesión del Shell.
Ejemplo de cómo crear directamente una variable y exportarla al mismo tiempo:
$ export LIVRO="Certificação Linux"
$ export
declare -x LIVRO="Certificação Linux"( ... )
Para ilustrar bien esto, vamos a crear una variable con mi nombre:
$ NOME="Uirá Ribeiro"
En el propio shell, se puede ver su contenido con el comando echo:
$ echo $NOMEUirá Ribeiro
Observe que, mientras no exportemos la variable NOME con el comando export, no estará disponible para ningún programa o script de shell ejecutado.
Por ejemplo, si creamos un script llamado meunome.sh con el siguiente contenido:
#!/bin/bash
echo “Meu nome é $NOME”
Para ejecutar el script meunome.sh, es necesario cambiar los permisos para ejecución:
$ chmod +x meunome.sh
Al ejecutar meunome.sh, no podrá leer el contenido de la variable NOME que fue creada anteriormente en el shell:
$ ./meunome.shMeu nome é
Pero si la variable NOME es exportada:
$ export NOME
Si ejecutamos nuevamente meunome.sh:
$ ./meunome.shMeu nome é Uirá Ribeiro
El comando export permitió que la variable NOME estuviera disponible para todos los comandos y programas ejecutados por el shell que está en ejecución, es decir, para todos los procesos hijos de este shell.
Para que quede bien claro, otro shell ejecutado en otro terminal o sesión no podrá leer la variable NOME, porque no está en ningún script de perfil o de carga de Bash.
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.