105.1 Lección 3
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
105 Shells y shell scripting |
Objetivo: |
105.1 Personalizando y utilizando el entorno de shell |
Lección: |
3 de 3 |
Introducción
Después de repasar los shells, los scripts de inicio y las variables, abarcaremos todo el tema de la personalización del shell echando un vistazo a dos elementos muy interesantes: los alias y las funciones. De hecho, todo el grupo de variables, alias y funciones, es lo que constituye el entorno de shell.
La principal fortaleza tiene que ver con el concepto de encapsulamiento: ofrecen la posibilidad de reunir — bajo un solo comando — una serie de comandos repetitivos o recurrentes.
Creando Alias
Un alias es un nombre sustituto de otro(s) comando(s). Puede ejecutarse como un comando normal, pero en su lugar ejecuta otro comando según la definición de alias
La sintaxis para declarar alias es muy sencilla. Estos se declaran escribiendo la palabra clave alias
seguida de su asignación. A su vez, dicha asignación consiste en el nombre de alias, un signo igual y uno o más comandos:
alias alias_name=command(s)
Por ejemplo:
$ alias oldshell=sh
Este alias iniciará una instancia del shell original sh
cuando el usuario digite oldshell
en la terminal:
$ oldshell $
El poder de los alias radica en que nos permiten escribir versiones cortas de comandos largos:
$ alias ls='ls --color=auto'
Note
|
Para información sobre |
De la misma manera, podemos crear alias para una serie de comandos concatenados — el punto y coma (;
) se utiliza como delimitador. Por ejemplo, podemos tener un alias que nos dé información sobre la ubicación del ejecutable git
y su versión:
$ alias git_info='which git;git --version'
Para invocar un alias, escribimos su nombre en la terminal:
$ git_info /usr/bin/git git version 2.7.4
El comando alias
producirá un listado de todos los alias disponibles en el sistema:
$ alias alias git-info='which git;git --version' alias ls='ls --color=auto' alias oldshell='sh'
El comando unalias
elimina los alias. Por ejemplo, unalias git-info
, posteriormente podremos ver como desaparece del listado:
$ unalias git-info $ alias alias ls='ls --color=auto' alias oldshell='sh'
Como se observa en la sentencia alias hi='echo We salute you.'
, debemos encerrar los comandos entre comillas (ya sea simple o doble) cuando — los argumentos o parámetros — contienen espacios:
$ alias greet='echo Hello world!' $ greet Hello world!
Los comandos con espacios también son incluidos con esas opciones:
$ alias ll='ls -al'
Ahora ll
listará todos los archivos — incluyendo los ocultos (a
) — en el formato largo (l
).
Podemos referenciar variables en los alias:
$ reptile=uromastyx $ alias greet='echo Hello $reptile!' $ greet Hello uromastyx!
La variable también puede ser asignada dentro del alias:
$ alias greet='reptile=tortoise; echo Hello $reptile!' $ greet Hello tortoise!
Podemos escapar de un alias con \
:
$ alias where?='echo $PWD' $ where? /home/user2 $ \where? -bash: where?: command not found
Escapar de un alias es útil cuando un alias tiene el mismo nombre que un comando normal. En este caso, el alias tiene prioridad sobre el comando original, sin embargo, este sigue siendo accesible al escapar del alias.
Del mismo modo, podemos colocar un alias dentro de otro alias:
$ where? /home/user2 $ alias my_home=where? $ my_home /home/user2
Además, también podemos agregar una función dentro de un alias como se muestra a continuación.
Expansión y evaluación de las comillas en los alias
Cuando se usan comillas con variables de entorno, las comillas simples hacen que la expansión sea dinámica:
$ alias where?='echo $PWD' $ where? /home/user2 $ cd Music $ where? /home/user2/Music
Sin embargo, con las comillas dobles la expansión se hace de forma estática:
$ alias where?="echo $PWD" $ where? /home/user2 $ cd Music $ where? /home/user2
Persistencia de Alias: Scripts de inicio
Al igual que con las variables, para que nuestros alias ganen persistencia, debemos escribirlos en scripts de inicialización que se ejecuten al inicio. Como ya sabemos, un buen archivo para que los usuarios agreguen sus alias personales es ~/.bashrc
. Probablemente encontrarás algunos alias allí (la mayoría de ellos comentados y listos para ser usados eliminando el #
principal):
$ grep alias .bashrc # enable color support of ls and also add handy aliases alias ls='ls --color=auto' #alias dir='dir --color= #alias vdir='vdir --color= #alias grep='grep --color= #alias fgrep='fgrep --color' #alias egrep='egrep --color= # some more ls aliases #ll='ls -al' #alias la='ls -A' #alias l='ls -CF' # ~/.bash_aliases, instead of adding them here directly. if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases
Como pueden leer en las últimas tres líneas, se nos ofrece la posibilidad de tener nuestro propio archivo dedicado a los alias — ~/.bash_aliases
— y ser ejecutado por .bashrc
con cada inicio del sistema. Así que podemos ir por esa opción, crear y editar dicho archivo:
########### # .bash_aliases: # a file to be populated by the user's personal aliases (and sourced by ~/.bashrc). ########### alias git_info='which git;git --version' alias greet='echo Hello world!' alias ll='ls -al' alias where?='echo $PWD'
Creando funciones
En comparación con los alias, las funciones son más programables y flexibles, especialmente cuando se trata de explotar todo el potencial de las variables incorporadas y los parámetros posicionales de Bash. También son muy buenas para trabajar con estructuras de control de flujo, como bucles o condicionales. Podemos pensar en una función como un comando que incluye la lógica a través de bloques o colecciones de otros comandos.
Dos sintaxis para crear funciones
Hay dos sintaxis válidas para definir las funciones.
- Usando la palabra clave
function
-
Por un lado, podemos usar la palabra clave
function
, seguida del nombre de la función y los comandos entre corchetes:function function_name { command #1 command #2 command #3 . . . command #n }
- Using
()
-
Por otro lado, podemos omitir la palabra
function
y usar dos paréntesis justo después del nombre de la función:function_name() { command #1 command #2 command #3 . . . command #n }
Es común agregar funciones en archivos o scripts. Sin embargo, también se puede escribir con cada comando en el shell prompt, en una línea diferente — note PS2
(>
) que indica una nueva línea después de un salto de línea:
$ greet() { > greeting="Hello world!" > echo $greeting > }
En cualquier caso, e independientemente de la sintaxis que elijamos, si decidimos saltarnos los saltos de línea y escribir una función en una sola línea, los comandos deben estar separados por punto y coma (también observe el punto y coma que hay después del último comando):
$ greet() { greeting="Hello world!"; echo $greeting; }
El shell bash
no se reaccionó negativamente cuando presionamos "Enter", así que nuestra función está lista para ser invocada. Para invocar una función, debemos escribir su nombre en la terminal:
$ greet Hello world!
Al igual que con las variables y los alias, si queremos que las funciones sean persistentes a través de los reinicios del sistema tenemos que agregarlas en los scripts de inicialización de shell como /etc/bash.bashrc
(global) o ~/.bashrc
(local).
Warning
|
Después de añadir alias o funciones a cualquier archivo de script de inicio, debe ejecutar tales archivos con |
Variables especiales incorporadas en Bash
Bourne Again Shell llega con un conjunto de variables especiales que son particularmente útiles para funciones y scripts. Estas son especiales porque sólo pueden ser referenciadas — no asignadas. Aquí hay una lista de las más relevantes:
$?
-
La referencia de esta variable se expande hasta el resultado de la última ejecución del comando. Un valor de
0
significa éxito:$ ps aux | grep bash user2 420 0.0 0.4 21156 5012 pts/0 Ss 17:10 0:00 -bash user2 640 0.0 0.0 12784 936 pts/0 S+ 18:04 0:00 grep bash $ echo $? 0
Un valor distinto de
0
significa error:user1@debian:~$ ps aux |rep bash -bash: rep: command not found user1@debian:~$ echo $? 127
$$
-
Se expande hasta el PID del shell (process ID):
$ ps aux | grep bash user2 420 0.0 0.4 21156 5012 pts/0 Ss 17:10 0:00 -bash user2 640 0.0 0.0 12784 936 pts/0 S+ 18:04 0:00 grep bash $ echo $$ 420
$!
-
It expands to the PID of the last background job:
$ ps aux | grep bash & [1] 663 $ user2 420 0.0 0.4 21156 5012 pts/0 Ss+ 17:10 0:00 -bash user2 663 0.0 0.0 12784 972 pts/0 S 18:08 0:00 grep bash ^C [1]+ Done ps aux | grep bash $ echo $! 663
NoteRemember, the ampersand (
&
) is used to start processes in the background. - Parámetros de posición de
0
a9
-
Se expanden a los parámetros o argumentos que se pasan a la función (alias o script) —
$0
expandiéndose al nombre del script o shell.Vamos a crear una función para demostrar los parámetros de posición — note
PS2
(>
) indicando nuevas líneas después de los saltos de línea:$ special_vars() { > echo $0 > echo $1 > echo $2 > echo $3 }
Ahora, invocaremos la función (
special_vars
) pasándole tres parámetros (debian
,ubuntu
,zorin
):$ special_vars debian ubuntu zorin -bash debian ubuntu zorin
Excelente, funcionó como se esperaba.
WarningAunque pasar parámetros posicionales a los alias es técnicamente posible, no es en absoluto funcional ya que - con los alias - los parámetros posicionales siempre se pasan al final:
$ alias great_editor='echo $1 is a great text editor' $ great_editor emacs is a great text editor emacs
Otras variables especiales incorporadas en Bash incluyen:
$#
-
Se expande al número de argumentos que se le pasan al comando.
$@
,$*
-
Se extienden a los argumentos pasados al comando.
$_
-
Se expande hasta el último parámetro o el nombre del script (entre otras cosas; ¡revisa "man bash" para conocer más!):
Variables en funciones
Por supuesto, las variables pueden utilizarse dentro de las funciones.
Para probarlo, esta vez crearemos un nuevo archivo vacío llamado funed
y agregaremos la siguiente función:
editors() { editor=emacs echo "My editor is: $editor. $editor is a fun text editor." }
Como ya habrán adivinado, debemos obtener el archivo primero para poder invocar la función:
$ . funed
Y ahora podemos probarlo:
$ editors My editor is emacs. emacs is a fun text editor.
Como pueden apreciar, para que la función de editors
funcione correctamente, la variable editor
debe ser fijada primero. El alcance de esa variable es local al shell actual y podemos referirnos a ella mientras la sesión este activa:
$ echo $editor emacs
Junto con las variables locales también podemos incluir variables de entorno en nuestra función:
editors() { editor=emacs echo "The text editor of $USER is: $editor." } editors
Note como esta vez decidimos llamar a la función desde el propio archivo (editors
en la última línea). De esta manera, cuando hagamos la ejecución del archivo, la función también será invocada — todo a la vez:
$ . funed The text editor of user2 is: emacs.
Parámetros de posición en las funciones
Algo similar ocurre con los parámetros posicionales.
Podemos pasarlos a las funciones desde adentro del archivo o el script (note la última línea: editors tortoise
):
editors() { editor=emacs echo "The text editor of $USER is: $editor." echo "Bash is not a $1 shell." } editors tortoise
Buscamos la fuente del archivo y probamos que funciona:
$ . funed The text editor of user2 is: emacs. Bash is not a tortoise shell.
Y también podemos pasar parámetros posicionales a funciones en la línea de comandos. Para probarlo, nos deshacemos de la última línea del archivo:
editors() { editor=emacs echo "The text editor of $USER is: $editor." echo "Bash is not a $1 shell." }
Entonces, tenemos que ejecutar el archivo:
$ . funed
Finalmente, invocamos la función con tortoise
como el parámetro posicional 1$
en la línea de comando:
$ editors tortoise The text editor of user2 is: emacs. Bash is not a tortoise shell.
Funciones en Scripts
Las funciones se encuentran principalmente en scripts de Bash.
Convertir nuestro archivo funed
en un script (lo llamaremos funed.sh
) es realmente sencillo:
#!/bin/bash editors() { editor=emacs echo "The text editor of $USER is: $editor." echo "Bash is not a $1 shell." } editors tortoise
¡Eso es! Sólo añadimos dos líneas:
-
La primera línea es el shebang y define qué programa va a interpretar el script:
#!/bin/bash
. Curiosamente, ese programa esbash
en sí mismo. -
La última línea es simplemente la invocación de la función.
Ahora sólo queda una cosa — tenemos que hacer el script ejecutable:
$ chmod +x funed.sh
Y ahora está listo para ser ejecutado:
$ ./funed.sh The text editor of user2 is: emacs. Bash is not a tortoise shell.
Note
|
Aprenderás todo sobre el shell scripting en las próximas lecciones. |
Una función dentro de un Alias
Como se ha dicho antes, podemos agregar una función dentro de un alias:
$ alias great_editor='gr8_ed() { echo $1 is a great text editor; unset -f gr8_ed; }; gr8_ed'
Este largo valor del alias merece una explicación. Vamos a desglosarlo:
-
Primero está la función en sí misma:
gr8_ed() { echo $1 is a great text editor; unset -f gr8_ed; }
-
El último comando de la función —
unset -f gr8_ed
— remueve la función para que no permanezca en la sesión actual debash
después de que el alias sea llamado. -
Por último, pero no menos importante, para tener una invocación de alias exitosa, también debemos invocar la función:
gr8_ed
.
Invoquemos el alias y probemos si funciona:
$ great_editor emacs emacs is a great text editor
Como se muestra en unset -f gr8_ed
, el comando unset
no sólo se usa para remover variables, sino también funciones. De hecho, hay opciones específicas:
unset -v
-
para variables
unset -f
-
para funciones
Si se usa sin opciones, unset
tratará de desajustar una variable primero y — si falla — entonces tratará de desajustar una función.
Una función dentro de un Alias
Ahora mencionamos que queremos comunicar dos cosas a user2
cada vez que se registre en el sistema:
-
Saludar y recomendar un editor de texto.
-
Ya que está empezando a agregar muchos archivos de video de
Matrosk`" en su carpeta `$HOME/Video
, también queremos darle una advertencia.
Para lograr ese propósito, hemos puesto las siguientes dos funciones en /home/user2/.bashrc
:
La primera función (check_vids
) hace el chequeo de los archivos .mkv
y la advertencia:
check_vids() { ls -1 ~/Video/*.mkv > /dev/null 2>&1 if [ "$?" = "0" ];then echo -e "Remember, you must not keep more than 5 video files in your Video folder.\nThanks." else echo -e "You do not have any videos in the Video folder. You can keep up to 5.\nThanks." fi }
check_vids
hace tres cosas:
-
Lista los archivos
mkv
en~/Video
enviando la salida — y cualquier error — al llamado bit-bucket (/dev/null
). -
Prueba la salida del comando anterior para el éxito.
-
Dependiendo del resultado de la prueba, imprime uno de los dos mensajes.
La segunda función es una versión modificada de nuestra función de editors
:
editors() { editor=emacs echo "Hi, $USER!" echo "$editor is more than a text editor!" check_vids } editors
Es importante observar dos cosas:
-
El último comando de
editors
invocacheck_vids
para que ambas funciones se encadenen: El saludo, el elogio, el chequeo y la advertencia se ejecutan en secuencia. -
editors
es el mismo punto de entrada a la secuencia de funciones, por lo que se invoca en la última línea (editors
).
Ahora, entremos como user2
y probemos que funciona:
# su - user2 Hi, user2! emacs is more than a text editor! Remember, you must not keep more than 5 video files in your Video folder. Thanks.
Ejercicios guiados
-
Completa la tabla con
Sí
oNo
considerando las capacidades de los alias y las funciones:Características Alias Funciones Las variables locales pueden ser usadas
Las variables de entorno pueden ser utilizadas
Se puede escapar con
\
Puede ser recursivo.
Muy productivo cuando se usa con parámetros posicionales
-
Introduzca el comando que lista todos los alias en su sistema:
-
Escribe un alias llamado
logg
que enumere todos los archivosogg
en~/Music
— uno por línea: -
Invoca el alias para probar que funciona:
-
Ahora, modifica el alias para que imprima el usuario de la sesión y dos puntos antes del listado:
-
Invóquelo de nuevo para probar que esta nueva versión también funciona:
-
Enumera todos los alias de nuevo y comprueba que tu alias de
logg
aparece en el listado: -
Quite el alias:
-
Estudie las columnas
Nombre del alias
,Comando(s) aliado(s)
y asigne los alias a sus valores correctamente:Nombre del alias Comando(s) aliado(s) Asignación de Alias b
bash
bash_info
which bash
+echo "$BASH_VERSION"
kernel_info
uname -r
greet
echo Hi, $USER!
computer
pc=slimbook
+echo My computer is a $pc
-
Como
root
, escribe una función llamadamy_fun
enetc/bash.bashrc
. La función debe saludar al usuario y decirle cuál es su PATH. Invóque la función para que el usuario reciba los dos mensajes cada vez que inicie sesión: -
Ingrese como
user2
para comprobar que funciona: -
Escriba la misma función en una sola línea:
-
Invoca la función:
-
Desconecta la función:
-
Esta es una versión modificada de la función
special_vars
:$ special_vars2() { > echo $# > echo $_ > echo $1 > echo $4 > echo $6 > echo $7 > echo $_ > echo $@ > echo $? > }
Este es el comando que usamos para invocarlo:
$ special_vars2 crying cockles and mussels alive alive oh
Adivina las salidas:
Referencia Valor echo $#
echo $_
echo $1
echo $4
echo $6
echo $7
echo $_
echo $@
echo $?
-
Basándonos en la función de muestra (
check_vids
) en la sección “Función dentro de una función”, escribe una función llamadacheck_music
para incluirla en un script de iniciobash
que acepte parámetros posicionales para que podamos modificarla fácilmente:-
El tipo de archivo que se comprueba:
ogg
-
El directorio en el que se guardan los archivos:
~/Music
-
El tipo de archivo que se guarda:
music
-
El número de archivos que se guardan:
7
-
Ejercicios de exploración
-
Las funciones de sólo lectura son aquellas cuyo contenido no podemos modificar. Haga una investigación sobre funciones de sólo lectura y complete la siguiente tabla:
Nombre de la función Haz que sea sólo de lectura Lista de todas las funciones de sólo lectura my_fun
-
Busca en la web cómo modificar
PS1
y cualquier otra cosa que necesites para escribir una función llamadafyi
(que se colocará en un script de inicio) que le da al usuario la siguiente información:-
Nombre del usuario
-
Directorio principal
-
Nombre del host
-
Tipo de sistema operativo
-
Buscar la ruta (PATH) de ejecutables
-
Directorio de correo
-
Con qué frecuencia se revisa el correo
-
¿Cuántos shells tiene la sesión actual?
-
Prompt (deberías modificarlo para que muestre
<user>@<host-date>
)
-
Resumen
En esta lección aprendiste:
-
Tanto los alias como las funciones son características importantes de shell que nos permiten encapsular bloques de código recurrentes.
-
Los alias son útiles para tener versiones más cortas de comandos largos y/o complicados.
-
Las funciones son procedimientos que implementan la lógica y nos permiten automatizar tareas, especialmente cuando se usan en scripts.
-
La sintaxis para escribir alias y funciones.
-
Como concatenar varios comandos por medio del punto y coma (
;
). -
Como usar correctamente las comillas con los alias.
-
Como hacer que los alias y las funciones sean persistentes.
-
Variables Bash especiales incorporadas:
$?
,$$
,$!
, parámetros de posición ($0
-$9
),$#
,$@
,$*
y$_
. -
Como usar variables y parámetros posicionales con las funciones.
-
Como usar funciones en los scripts.
-
Como invocar una función desde un alias.
-
Como invocar una función desde otra función.
-
Lo básico para crear un script
bash
.
Comandos y palabras clave utilizadas en esta lección:
alias
-
Crear alias.
unalias
-
Eliminar alias.
cd
-
Cambiar de directorio.
grep
-
Imprime líneas que coincidan con un patrón.
function
-
Palabra clave de Shell para crear funciones
.
-
Ejecutar un archivo
source
-
Realiza una ejecución de un archivo con el comando source
ps
-
Captura de los procesos actuales.
echo
-
Imprimir en pantalla una línea de texto.
chmod
-
Cambiar permisos de un archivo, por ejemplo hacerlo ejecutable.
unset
-
Remover variables and funciones.
su
-
Cambia la identificación de usuario o lo convierte en superusuario.
Respuesta a los ejercicios guiados
-
Completa la tabla con
Sí
oNo
considerando las capacidades de los alias y las funciones:Características Alias Funciones Las variables locales pueden ser usadas
Sí
Sí
Las variables de entorno pueden ser utilizadas
Sí
Sí
Se puede escapar con
\
Sí
No
Puede ser recursivo.
Sí
Sí
Muy productivo cuando se usa con parámetros posicionales
No
Sí
-
Introduzca el comando que lista todos los alias en su sistema:
alias
-
Escribe un alias llamado
logg
que enumere todos los archivosogg
en~/Music
— uno por línea:alias logg='ls -1 ~/Music/*ogg'
-
Invoca el alias para probar que funciona:
logg
-
Ahora, modifica el alias para que imprima el usuario de la sesión y dos puntos antes del listado:
alias logg='echo $USER:; ls -1 ~/Music/*ogg'
-
Invóquelo de nuevo para probar que esta nueva versión también funciona:
logg
-
Enumera todos los alias de nuevo y comprueba que tu alias de
logg
aparece en el listado:alias
-
Quite el alias:
unalias logg
-
Estudie las columnas
Nombre del alias
,Comando(s) aliado(s)
y asigne los alias a sus valores correctamente:Nombre del alias Comando(s) aliado(s) Asignación de Alias b
bash
alias b=bash
bash_info
which bash
+echo "$BASH_VERSION"
alias bash_info='which bash; echo "BASH_VERSION"'
kernel_info
uname -r
alias kernel_info='uname -r'
greet
echo Hi, $USER!
alias greet='echo Hi, $USER'
computer
pc=slimbook
+echo My computer is a $pc
alias computer='pc=slimbook; echo My computer is a $pc'
NoteLas comillas simples también pueden ser reemplazadas por dobles.
-
Como
root
, escribe una función llamadamy_fun
enetc/bash.bashrc
. La función debe saludar al usuario y decirle cuál es su PATH. Invóque la función para que el usuario reciba los dos mensajes cada vez que inicie sesión:Opción A:
my_fun() { echo Hello, $USER! echo Your path is: $PATH } my_fun
Opción B:
function my_fun { echo Hello, $USER! echo Your path is: $PATH } my_fun
-
Ingrese como
user2
para comprobar que funciona:su - user2
-
Escriba la misma función en una sola línea:
Opción A:
my_fun() { echo "Hello, $USER!"; echo "Your path is: $PATH"; }
Opción B:
function my_fun { echo "Hello, $USER!"; echo "Your path is: $PATH"; }
-
Invoca la función:
my_fun
-
Remover la función:
unset -f my_fun
-
Esta es una versión modificada de la función
special_vars
:$ special_vars2() { > echo $# > echo $_ > echo $1 > echo $4 > echo $6 > echo $7 > echo $_ > echo $@ > echo $? > }
Este es el comando que usamos para invocarlo:
$ special_vars2 crying cockles and mussels alive alive oh
Adivina las salidas:
Referencia Valor echo $#
7
echo $_
7
echo $1
crying
echo $4
mussels
echo $6
alive
echo $7
oh
echo $_
oh
echo $@
crying cockles and mussels alive alive oh
echo $?
0
-
Basándonos en la función de muestra (
check_vids
) en la sección “Función dentro de una función”, escribe una función llamadacheck_music
para incluirla en un script de iniciobash
que acepte parámetros posicionales para que podamos modificarla fácilmente:-
El tipo de archivo que se comprueba:
ogg
-
El directorio en el que se guardan los archivos:
~/Music
-
El tipo de archivo que se guarda:
music
-
El número de archivos que se guardan:
7
check_music() { ls -1 ~/$1/*.$2 > ~/.mkv.log 2>&1 if [ "$?" = "0" ];then echo -e "Remember, you must not keep more than $3 $4 files in your $1 folder.\nThanks." else echo -e "You do not have any $4 files in the $1 folder. You can keep up to $3.\nThanks." fi } check_music Music ogg 7 music
-
Respuestas a los ejercicios de exploración
-
Las funciones de sólo lectura son aquellas cuyo contenido no podemos modificar. Haga una investigación sobre funciones de sólo lectura y complete la siguiente tabla:
Nombre de la función
Haz que sea sólo de lectura
Lista de todas las funciones de sólo lectura
my_fun
readonly -f my_fun
readonly -f
-
Busca en la web cómo modificar
PS1
y cualquier otra cosa que necesites para escribir una función llamadafyi
(que se colocará en un script de inicio) que le da al usuario la siguiente información:-
Nombre del usuario
-
Directorio principal
-
Nombre del host
-
Tipo de sistema operativo
-
Buscar la ruta (PATH) de ejecutables
-
Directorio de correo
-
Con qué frecuencia se revisa el correo
-
¿Cuántos shells tiene la sesión actual? *
-
prompt (deberías modificarlo para que muestre
<user>@<host-date>
)fyi() { echo -e "For your Information:\n Username: $USER Home directory: $HOME Host: $HOSTNAME Operating System: $OSTYPE Path for executable files: $PATH Your mail directory is $MAIL and is searched every $MAILCHECK seconds. The current level of your shell is: $SHLVL" PS1="\u@\h-\d " } fyi
-