fbpx Comandos set y unset en Linux: Variables y opciones | Certificação Linux

Usar set y unset en Linux: gestionar variables y funciones del shell

📅 01/01/2019 ⏱ 5 min ✍️ Uira Ribeiro
Linuxcomandos
Usar set y unset en Linux: gestionar variables y funciones del shell
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponible en
Google Play
Disponible en
App Store

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

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Después de años viendo profesionales perder horas en tareas simples por no conocer las herramientas correctas de Linux, decidí enseñar.
Hoy soy autor de la mayoría de los Materiales de Aprendizaje oficiales de la LPI y mentor de más de 14,000 alumnos certificados.

Conoce mi historia completa →

Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp