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
>