Características generales

Prompt

Es una secuencia de uno o más caracteres que se caracterizan por marcar el comienzo de la lectura de datos del usuario. Además provee información como la carpeta actual, el usuario de esa shell, entre otras cosas.

directorio actual---|
someuser@98-0-1-198 ~ $
|__ usuario |__ nombre del host

Al usuario común suele distinguir su prompt con el símbolo $, mientras que al superusuario del sistema con #.

Es posible personalizar el prompt utilizando caracteres especiales como los siguientes:

Caracter

Acción

\d

Expande a la fecha en el formato "Tue Jun 27"

\D{fmt}

Permite personalizar el formato de la fecha (man strftime)

\D{%c}

Muestra la fecha y hora en el locale actual

\n

Salto de línea (para prompts multilínea)

\w

Path al directorio actual

\H

El nombre completo del host

A través del comando echo $PS1 se puede visualizar cómo está definida la variable. Por ejemplo, el output de dicho comando puede ser el siguiente: \u@\h:\w$

ACTIVIDAD. Determinen el formato de su prompt y agreguen la información que quieran al mismo. Verifiquen que su nuevo prompt se ve como uds querían.

Variables de entorno

Las variables se usan generalmente en los sistemas operativos para guardar valores que afectan a cómo se ejecutan los programas que el usuario está utilizando. Los que estén acostumbrados a Windows (usualmente la mayoría) tal vez no las hayan visto tan de cerca, pero para los usuarios de Linux las variables de entorno son más transparentes.

Para ver todas las variables de entorno que tenemos en nuestra sesión ahora mismo, podemos ejecutar el comando env. Por ejemplo, les muestro la salida de ese comando en mi terminal:

[vkmc@amaterasu ~]$ env
SHELL=/bin/bash
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/2511,unix/unix:/tmp/.ICE-unix/2511
COLORTERM=truecolor
HISTCONTROL=ignoredups
XDG_MENU_PREFIX=gnome-
HISTSIZE=1000
HOSTNAME=amaterasu
GUESTFISH_OUTPUT=\e[0m
(...)

Ahí podemos ver que la shell que estoy usando es Bash, que el nombre de mi laptop es "amaterasu" y otros valores que me pueden llegar a interesar.

Una variable de entorno particularmente importante es la variable PATH. Esta variable contiene las rutas absolutas en los cuales mi sistema va a buscar cuando yo quiera usar algún ejecutable (un programa). Por ejemplo, usando el comando echo puedo mostrar el contenido de esta variable de entorno. Veámoslo:

[vkmc@amaterasu ~]$ echo $PATH
/home/vkmc/.local/bin:/home/vkmc/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin

Ahi podemos ver una secuencia de rutas absolutas en donde mi operativo puede encontrar programas ejecutables. Saber la existencia de esta variable de entorno y cómo modificarla es bastante útil para cuando queremos agregar nuevos lugares en donde nuestro sistema operativo tiene que buscar ejecutables. Por ejemplo, queremos probar un programa que hicimos y no queremos instarlo en el sistema, simplemente agregamos la ruta absoluta de donde se encuentra el ejecutable que desarrollé en mi variable PATH.

[vkmc@amaterasu ~]$ PATH=$PATH:/ruta/

Archivos de configuración de Bash

Existe una variedad de archivos utilizados para configurar Bash y que son utilizados por el sistema o por un usuario común. Estos archivos son:

  • ~/.bashrc

  • ~/.bash_profile

  • ~/.bash_logout

  • /etc/bashrc

  • /etc/profile

Poseen algunas cosas en común:

  • Son archivos de texto.

  • Se pueden modificar con cualquier editor de texto, como vim o gedit.

  • Son scripts escritos en shell.

  • Se ejecutan de manera automática cuando en el sistema operativo se produce alguna condición.

  • Son modificables.

Si consultamos las páginas de manual de Bash (lo veremos en otra sección del taller) podemos encontrar información sobre cada uno:

/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits

Agregamos las siguientes definiciones:

/etc/bashrc
System-wide .bashrc file for interactive bash shells.

Este es un ejemplo de .bashrc

$ cat .bash_profile
export PATH="$HOME/.jenv/bin:$PATH" && eval "$(jenv init -)"
[[ -r ~/.bashrc ]] && . ~/.bashrc

El built-in command . (si, un punto) es análogo al comando source y su comportamiento consiste en ejecutar el contenido de un archivo pasado como argumento.