¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Programación shell en Unix/Linux
  3. Configuración del entorno de trabajo
Extrait - Programación shell en Unix/Linux ksh, bash, estándar POSIX (con ejercicios corregidos) (5ª edición)
Extractos del libro
Programación shell en Unix/Linux ksh, bash, estándar POSIX (con ejercicios corregidos) (5ª edición) Volver a la página de compra del libro

Configuración del entorno de trabajo

Presentación

Los temas abordados en este capítulo permitirán al usuario configurar su entorno de trabajo teniendo en cuenta el shell utilizado.

Se definen una serie de variables en el entorno del shell. Estas contienen la información necesaria para el funcionamiento del intérprete o de los comandos ejecutados por este.

Variables de entorno

1. Listado de variables

El comando set devuelve la lista de las variables definidas en el shell actual.

Ejemplo

$ set 
HOME=/home/cristina 
LOGNAME=cristina 
PATH=/usr/bin:/bin 
PS1='$ ' 
PS2='> ' 
TERM=vt100 
... 

2. Mostrar el valor de una variable

El carácter especial $ del shell permite acceder al contenido de una variable.

Ejemplo

$ echo $HOME 
/home/cristina 
$ 

3. Modificación del valor de una variable

El shell permite inicializar y modificar variables.

Ejemplo

$ variable=valor 
$ echo $variable 
valor 
$ 

Si el valor contiene caracteres especiales del shell ($, >, espacio...), hay que impedir que el shell los interprete poniendo el valor entre apóstrofes.

Utilizar apóstrophes es una de las tres maneras posibles de enmascarar caracteres en shell. Ver el capítulo Las bases de la programación shell - Caracteres de protección.

Ejemplo

El símbolo > (redirección) tiene que enmascararse, el espacio (separador de palabras en la línea de comandos) también:

$ variable='palabra1 palabra2 =>' 
$ echo $variable 
palabra1 palabra2 => 
$ 

No hay que poner espacios alrededor del símbolo =. El shell no comprendería que se trata de una asignación.

4. Variables principales

Las variables presentadas a continuación tienen un valor definido en el momento de conexión. Otras variables pueden ser definidas posteriormente.

La modificación de una variable de entorno en línea de comandos es válida solo en el shell actual. Para que las modificaciones sean tomadas en cuenta en todos los shells, debemos utilizar los archivos de configuración (ver Los archivos de entorno en ese capítulo).

a. HOME

Esta variable contiene el valor del directorio de inicio del usuario. No debe ser modificada.

b. PATH

La variable PATH contiene una lista de directorios que el shell explora cuando este debe invocar un comando externo.

En ningún caso, un comando se buscará en el directorio actual si este no figura en la variable PATH.

Ejemplos

$ echo $PATH 
/usr/bin:/bin 
$ 

El comando date se conoce:

$ date 
Fri Jan 28 17:51:23 MET 2023 
$ 

En efecto, se encuentra en el directorio /usr/bin:

$ find / -name date 2 > /dev/null 
/usr/bin/date 
$ 

El comando ping...

Las opciones del shell

posix

ksh

bash

El shell propone una serie de opciones que permiten la configuración un cierto número de funcionalidades.

1. Activar y desactivar una opción del shell

Las opciones -o y +o del comando interno set permiten activar y desactivar respectivamente una opción del shell.

Sintaxis

set -o opción 
set +o opción 

2. Visualizar la lista de opciones

El comando set con la opción -o muestra la lista de las opciones del shell indicando si están actualmente activadas o no.

$ set -o 
Current option settings 
allexport        off 
bgnice           on 
emacs            on 
errexit          off 
gmacs            off 
ignoreeof        off 
interactive      on 
keyword          off 
markdirs         off 
monitor          on 
noexec           off 
noclobber        off 
noglob           off 
nolog            off 
nounset          off 
privileged       off 
restricted       off 
trackall         off ...

Los alias

posix

ksh

bash

El shell ofrece un comando interno alias que permite crear atajos a comandos. Un cierto número de alias existen por defecto.

1. Definir un alias

Ejemplo

Creación de tres alias: l, c, y rm que serán respectivamente los equivalentes a ls -l, clear y rm -i:

$ alias l='ls -l' 
$ l 
total 30 
-rw-r--r--   1 cristina    curso     11428 Ene 28 06:19 out 
-rw-r--r--   1 cristina    curso        22 Ene 31 17:08 out2 
-rwxr--r--   1 cristina    curso        18 Nov 15 20:08 primero 
-rw-r--r--   1 cristina    curso        51 Ene 28 06:22 resu 
$ alias c='clear' 
$ alias rm='rm -i' 
$ rm out 
rm: remove out (y/n)? n 
$ 

2. Visualizar la lista de alias

a. Visualizar todos los alias

$ alias 
autoload='typeset -fu' 
c=clear 
functions='typeset -f' 
history='fc -l' 
integer='typeset -i' 
l='ls -l' 
local=typeset 
r='fc -e -' 
rm='rm -i' 
... 

b. Visualizar un alias en particular

$ alias l 
l='ls -l' 
$ 

3. Eliminar un alias

$ unalias l 
$ l 
ksh: l:  not found 
$ 

Histórico de comandos

posix

opción vi

ksh

bash

El shell almacena los comandos ejecutados en un archivo de texto localizado en el directorio de inicio del usuario. El nombre de este archivo difiere en función del shell utilizado.

Shell

Archivo histórico

ksh

.sh_history

bash

.bash_history

Para recuperar los comandos almacenados en este archivo, shell ofrece dos opciones: emacs y vi.

Estas dos opciones son mutuamente excluyentes: la activación de una desactiva la otra. En ksh, ambas están desactivadas por defecto. En bash, la opción emacs está activada por defecto.

Configuración por defecto en ksh:

$ set -o 
Current option settings 
... 
emacs            off 
... 
vi               off 
... 
$ 

Configuración por defecto en bash:

$ set -o 
Current option settings 
... 
emacs            on 
... 
vi               off 
... 
$ 

1. Configurar la recuperación de comandos en ksh

Korn shell ofrece dos opciones para recordar comandos: la opción emacs o la opción vi. Para recordar los comandos utilizando las flechas, será necesario realizar una configuración (ver más abajo), excepto en KSH93 a partir de la versión "h" (ksh93h) en la que las flechas funcionan de forma predeterminada en ambos modos.

Para conocer la versión de su ksh93:

$ /bin/ksh --version 
   version         sh (AT&T Research) 93u+ 2012-08-01 

a. Opción vi

El shell ofrece el uso de comandos idénticos a los que tiene el editor vi para recuperar y, si es preciso, modificar los comandos almacenados en el archivo ~/.sh_history. Para ello es necesario activar la opción:

$ set -o vi 

El carácter ~ representa en bash y en ksh el directorio inicial del usuario.

A partir de este momento, hay que imaginarse que se está dentro del editor vi. Ciertas acciones se ejecutan en modo comando, otras en modo inserción. La tabla siguiente agrupa los comandos principales que permiten gestionar el histórico.

Acciones en modo inserción

Este es el modo por defecto. El modo inserción permite introducir o modificar un comando.

Acción

Comando

Introducir un carácter...

Los archivos de entorno

1. Características de los archivos de entorno

Los archivos de entorno sirven para almacenar de manera permanente las definiciones vinculadas a la configuración del entorno de usuario.

Contienen comandos Unix y siempre se interpretan por un shell. Estos son los scripts shell de entorno.

Algunos scripts de entorno solo se ejecutan por el shell de conexión. Por tanto, es importante saber distinguir un shell de conexión de un shell normal.

a. Shell de conexión

Entorno de texto

En un entorno de texto, el shell de conexión se ejecuta inmediatamente después de la identificación del usuario por el nombre de login y su contraseña. Este proceso es el ancestro común de todos los comandos que se ejecutarán durante la sesión. Todo shell ejecutado posteriormente no tendrá el estatus de shell de conexión.

Entorno gráfico

En un entorno gráfico, el shell de conexión se ejecuta entre la pantalla de conexión y la visualización de la interfaz gráfica. Por lo tanto, este no es un shell interactivo. La interfaz gráfica y toda aplicación ejecutada posteriormente a partir de los iconos son procesos descendientes del shell de conexión. En la mayoría de los casos, un terminal abierto desde el entorno gráfico no es un shell de conexión.

Sin embargo, ciertas plataformas permiten ejecutar desde la interfaz gráfica o bien un shell de conexión o bien un shell ordinario. Los archivos de entorno usados no serán los mismos en cada caso.

b. Archivos de entorno leídos por el shell de conexión

El shell de conexión lee un script shell del sistema llamado /etc/profile. Este archivo se gestiona por el administrador del sistema y contiene los parámetros comunes a todos los usuarios.

A continuación busca en el directorio de inicio del usuario un script de entorno cuyo nombre depende del shell usado (ver tabla siguiente).

Shell

Nombre del archivo de entorno leído por el shell de conexión

sh (Bourne y POSIX) - ksh

.profile

bash

Uno de los tres archivos siguientes en el orden de búsqueda.

-.bash_profile

-.bash_login

-.profile

¿Qué poner en el archivo .profile (.bash_profile)?

Este archivo contiene principalmente:

  • La definición seguida de la exportación posible de una o varias variables....

Ejercicios

Los archivos proporcionados para los ejercicios están disponibles en la carpeta dedicada al capítulo en el directorio Ejercicios/archivos.

1. Variables de entorno

a. Ejercicio 1

1.

Haga que se muestre la lista de todas las variables de entorno.

2.

Haga que se muestre la lista de las variables de entorno exportadas.

3.

Haga que se muestre el valor de las variables de entorno PATH y HOME.

b. Ejercicio 2

Cree un directorio bin en el directorio de inicio. En bin, cree o recupere el programa corto siguiente (script shell que muestra una frase en la pantalla):

$ pwd 
/home/cristina/bin 
$ vi  micomando 
echo "Ejecución de micomando" 
$ chmod u+x micomando 

1.

Vuelva al directorio de inicio.

2.

Modifique la variable PATH de forma que este comando funcione:

$ micomando 
Ejecución de micomando 

3.

Haga que esta configuración sea permanente.

2. Alias de comandos

a. Ejercicio 1

1.

Haga que se muestren los alias del shell actual (ksh, bash).

2.

Cree un alias p que corresponda al comando ps -ef | more.

3.

Pruebe el alias.

4.

Destruya el alias.

5.

Haga que este alias sea permanente.

b. Ejercicio 2

Mientras se encontraba definiendo un alias, el usuario desafortunadamente ha tocado la tecla [Entrar] antes de haber podido cerrar las comillas. ¿A qué corresponde el carácter > y cómo salir de esta situación?

$ alias 'l=ls -l 
Entrar 
>