GNU/Linux >> Tutoriales Linux >  >> Linux

The Magic ~:Expansión Bash Tilde con 5 ejemplos

El shell de Bash proporciona algunas variables que tienen el prefijo '~' (llamado tilde) que se denomina Tilde Expansions.

Son sinónimos de contenidos de otras variables dentro de su shell.

La expansión de tilde es el proceso de convertir estas abreviaturas en los nombres de directorio que representan. En este artículo, revisemos la función de expansión de tilde con los ejemplos.

La expansión de tilde se aplica a los caracteres '~' más incluye +, – y N (que es un número entero) hasta espacios en blanco o una barra inclinada .

La expansión de tilde se usa para expandirse a varias rutas específicas:

  • Directorios de inicio
  • Directorio de trabajo actual/anterior
  • Directorios de la pila de directorios.

Directorios de inicio

La expansión Tilde proporciona una forma de expandir el directorio de inicio del usuario actual o el directorio de inicio del nombre de usuario dado.

Syntax

~ Expand to the variable $HOME or home directory of the current user

~USER Expand to the home directory of the given username

Ejemplo 1. Inicio de usuarios actuales

Tilde(~) como una palabra separada, se expande a $HOME si está definido, si $HOME no está definido, entonces se expande con el directorio de inicio del usuario actual.

Ahora el valor de la variable HOME es /home/oracle, por lo que cd ~ cambió el directorio actual al valor de $HOME.

## Logging into a oracle user, whose home directory is /home/oracle
# su oracle
[tmp]$ pwd
/tmp

[tmp]$ echo $HOME
/home/oracle

[tmp]$ cd ~

[~]$ pwd
/home/oracle

HOME se cambia a /sbin, y cd ~ usa solo $HOME, no el directorio de inicio del usuario. Después de anular el valor de $HOME, cd ~ cambió el directorio al valor del directorio de inicio establecido para el usuario de Oracle en /etc/passwd. Para la expansión de Tilde, HOME anula el directorio de inicio real.

[~]$ export HOME=/sbin

[oracle]$ cd ~

[~]$ pwd
/sbin

[~]$ unset HOME

[sbin]$ cd ~

[oracle]$ pwd
/home/oracle

Ejemplo 2. Directorio de inicio del usuario dado

El siguiente script toma la copia de seguridad de un archivo de registro que tiene la fecha actual en el nombre. También registra la hora de inicio y la hora de finalización en el archivo llamado backup.log en el directorio de inicio del usuario de Oracle.

#! /bin/bash

echo "Initiating the backup at `date`" >> ~oracle/backup.log

da=`date +%F`
cp $da.log{,.bak}

echo "END BACKUP at `date`" >> ~oracle/backup.log

$ ls -l /home/oracle/
total 8
-rw-r--r-- 1 root   root       99 Jun  4 14:23 backup.log

Si el nombre de usuario dado no existe, entonces no se expande a algo. En el siguiente ejemplo, no hay ningún usuario llamado ora. Entonces, ~ora no se expandirá a /home/ora.

$ echo ~ora
~ora

Consulte nuestro artículo anterior para comprender cómo realizar la expansión de llaves en bash. es decir, cómo usar { } en bash.

Directorios de trabajo

Tilde con + y - se utilizan para representar los directorios de trabajo.

  • ~+ se expande al valor de la variable PWD que contiene el directorio de trabajo actual.
  • ~- se expande al valor de la variable OLDPWD, que contiene el directorio de trabajo anterior. Si OLDPWD no está configurado, ~- no se expande.

Ejemplo 3. Expansión de directorios de trabajo antiguos/actuales

El siguiente ejemplo comparará el archivo en el directorio actual y el directorio de trabajo anterior.

$ cat comp.sh
#! /bin/bash

set -x
cd /var/opt/gg
if [ -f gg.c ]
then
echo "File1 exists"
fi

cd /var/opt1/gg
if [ -f gg.c ]
then
echo "File2 exists"
cmp ~+/gg.c ~-/gg.c
fi

$ ./comp.sh
+ cd /var/opt/gg
+ '[' -f gg.c ']'
+ echo 'File1 exists'
File1 exists
+ cd /var/opt1/gg
+ '[' -f gg.c ']'
+ echo 'File2 exists'
File2 exists
+ cmp /var/opt1/gg/gg.c /var/opt/gg/gg.c
cmp: EOF on /var/opt1/gg/gg.c
$

En la ejecución anterior:

  • ~+/gg.c se expande a /var/opt1/gg/gg.c
  • ~-/gg.c se expande a /var/opt/gg/gg.c

Este artículo es parte de la serie de tutoriales de Bash en curso.

Expansión para directorios en pila

Cada proceso bash contiene un objeto de pila que se puede usar para realizar un seguimiento de los directorios que visitó un script mientras procesaba los datos del contenido del directorio.

Es un mecanismo muy simple para poder hacer referencia a directorios o volver a cambiar a directorios que uno visitó antes. La expansión Tilde también proporciona expansión a los directorios en la pila de directorios.

  • ~+N Expande el directorio N en la pila de directorios (contando desde la izquierda de la lista impresa por dirs cuando se invoca sin opciones), comenzando con cero.
  • ~-N Expande el directorio N en la pila de directorios (contando desde la derecha de la lista impresa por dirs cuando se invoca sin opciones), comenzando con cero.

Revise nuestro artículo anterior para comprender cómo usar los comandos dirs, pushd y popd para manipular la pila de directorios.

Ejemplo 4. Muestra el enésimo directorio desde la izquierda usando ~+

En el siguiente ejemplo, la pila de directorios tiene 4 directorios. ~+2 le da la ruta del directorio disponible en la segunda posición desde la izquierda comenzando con cero.

$ dirs -v
 0  /sbin
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

$ cd ~+2

$ pwd
/var/opt/GG/bin

Pero la parte superior de la pila (posición cero) siempre tendrá el directorio actual. Entonces, después de la ejecución anterior, se muestra lo siguiente en la pila de directorios.

$  dirs -v
 0  /var/opt/GG/bin
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

Ejemplo 5. Muestra el directorio N desde la derecha usando ~-

Lo siguiente es similar al ejemplo anterior. Pero considerará los directorios desde la parte inferior de la pila debido a ~-.

$ dirs -v
 0  /var/opt/GG/bin
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

$ cd ~-2

$ pwd
/var/opt/midas

$ dirs -v
 0  /var/opt/midas
 1  /var/opt/midas
 2  /var/opt/GG/bin
 3  /root

Linux
  1. ¿Usando –exclude con el comando Du?

  2. ¿Es `~#` una expansión tilde de Bash?

  3. ¿Es posible redefinir la tilde ('~', directorio de inicio)?

  4. ¿Cómo cambio el directorio en Git Bash con Git para Windows?

  5. '&&' vs. '&' con el comando 'test' en Bash

El tutorial del comando fc con ejemplos para principiantes

Comando Bash Echo explicado con ejemplos en Linux

Redirección de Bash explicada con ejemplos

Bash Scripting - Funciones explicadas con ejemplos

Bash Scripting - Variables explicadas con ejemplos

Sintaxis de Bash If Else con ejemplos