GNU/Linux >> Tutoriels Linux >  >> Linux

The Magic ~:Extension Bash Tilde avec 5 exemples

Le shell Bash fournit des variables préfixées par '~' (nommées tilde) qui s'appellent Tilde Expansions.

Ce sont des synonymes du contenu d'autres variables dans votre shell.

L'expansion de Tilde est le processus de conversion de ces abréviations en noms de répertoires qu'elles représentent. Dans cet article, passons en revue la fonctionnalité d'expansion de tilde avec les exemples.

L'expansion de tilde s'applique aux caractères '~' plus incluant +, - et N (qui est un entier) jusqu'à un espace ou une barre oblique .

L'extension tilde est utilisée pour développer plusieurs chemins spécifiques :

  • Répertoires personnels
  • Répertoire de travail actuel/précédent
  • Répertoires de la pile de répertoires.

Répertoires personnels

L'extension Tilde permet d'étendre le répertoire personnel de l'utilisateur actuel ou le répertoire personnel du nom d'utilisateur donné.

Syntax

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

~USER Expand to the home directory of the given username

Exemple 1. Accueil des utilisateurs actuels

Tilde(~) en tant que mot séparé, se développe en $HOME s'il est défini, si $HOME n'est pas défini, alors il se développe avec le répertoire personnel de l'utilisateur actuel.

Maintenant, la valeur de la variable HOME est /home/oracle donc cd ~ a changé le répertoire courant à la valeur 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 est remplacé par /sbin et cd ~ utilise uniquement $HOME et non le répertoire personnel de l'utilisateur. Après avoir supprimé la valeur de $HOME, cd ~ a remplacé le répertoire par la valeur du répertoire personnel défini pour l'utilisateur oracle dans /etc/passwd. Pour l'extension Tilde, HOME remplace le véritable répertoire personnel.

[~]$ export HOME=/sbin

[oracle]$ cd ~

[~]$ pwd
/sbin

[~]$ unset HOME

[sbin]$ cd ~

[oracle]$ pwd
/home/oracle

Exemple 2. Répertoire d'accueil de l'utilisateur donné

Le script suivant prend la sauvegarde d'un fichier journal dont le nom contient la date actuelle. Il enregistre également l'heure de début et l'heure de fin dans le fichier appelé backup.log dans le répertoire personnel de l'utilisateur 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 le nom d'utilisateur donné n'existe pas, il ne s'étend pas à quelque chose. Dans l'exemple suivant, il n'y a pas d'utilisateur appelé ora. Ainsi, ~ora ne s'étendra pas à /home/ora.

$ echo ~ora
~ora

Reportez-vous à notre article précédent pour comprendre comment effectuer l'expansion des accolades dans bash. c'est-à-dire comment utiliser { } dans bash.

Répertoires de travail

Tilde avec + et - sont utilisés pour représenter les répertoires de travail.

  • ~+ se développe à la valeur de la variable PWD qui contient le répertoire de travail actuel.
  • ~- développe la valeur de la variable OLDPWD, qui contient le répertoire de travail précédent. Si OLDPWD n'est pas défini, ~- n'est pas développé.

Exemple 3. Extension des répertoires de travail anciens/actuels

L'exemple suivant comparera le fichier dans le répertoire courant et le répertoire de travail précédent.

$ 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
$

Dans l'exécution ci-dessus :

  • ~+/gg.c se développe en /var/opt1/gg/gg.c
  • ~-/gg.c se développe en /var/opt/gg/gg.c

Cet article fait partie de la série de tutoriels Bash en cours.

Expansion pour les répertoires dans Stack

Chaque processus bash contient un objet de pile qui peut être utilisé pour garder une trace des répertoires qu'un script a visités pendant qu'il traite les données du contenu du répertoire.

C'est un mécanisme très simple pour pouvoir référencer des répertoires ou revenir à des répertoires déjà visités. L'extension Tilde fournit également une extension aux répertoires de la pile de répertoires.

  • ~+N Développe le Nième répertoire dans la pile de répertoires (en comptant à partir de la gauche de la liste imprimée par dirs lorsqu'il est invoqué sans options), en commençant par zéro.
  • ~-N Développe le Nième répertoire dans la pile de répertoires (en partant de la droite de la liste imprimée par dirs lorsqu'il est invoqué sans options), en commençant par zéro.

Consultez notre article précédent pour comprendre comment utiliser les commandes dirs, pushd et popd pour manipuler la pile de répertoires.

Exemple 4. Affiche le Nième répertoire à partir de la gauche en utilisant ~+

Dans l'exemple suivant, la pile de répertoires comporte 4 répertoires. ~+2 vous donne le chemin du répertoire disponible en deuxième position à partir de la gauche en commençant par zéro.

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

$ cd ~+2

$ pwd
/var/opt/GG/bin

Mais le haut de la pile (position zéro) aura toujours le répertoire courant. Ainsi, après l'exécution ci-dessus, ce qui suit est affiché dans la pile de répertoires.

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

Exemple 5. Affiche le Nième répertoire à partir de la droite en utilisant ~-

Ce qui suit est similaire à l'exemple ci-dessus. Mais, considérera les répertoires du bas de la pile à cause du ~-.

$ 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. Utiliser –exclude avec la commande Du ?

  2. Est-ce que `~#` est une extension Tilde de Bash ?

  3. Est-il possible de redéfinir le tilde ('~', répertoire personnel) ?

  4. Tableaux bash avec exemples

  5. Quel est l'intérêt de chiffrer le répertoire personnel ?

Le didacticiel de commande fc avec des exemples pour les débutants

La commande Bash Echo expliquée avec des exemples sous Linux

La redirection bash expliquée avec des exemples

Bash Scripting - Fonctions expliquées avec des exemples

Bash Scripting - Variables expliquées avec des exemples

Syntaxe Bash If Else avec exemples