Comme la page précédente, j'ai l’impression d'avoir épluché 1Ko d'oignons...
Je passe sur la première section et son titre (
Les caractères symboliques) qui regroupe tout et un peu n'importe quoi.
Mais je ne peux laisser passer le titre de la seconde section :
Caractères spéciaux d'échappement (le terminal et dans les scripts)Sous ce nom fallacieux (donc faux) est regroupé ce que bash nomme
les caractères de protections (
\,
", et
') et
le caractère de commentaire (
#).
Note : Le caractère de commentaire n'est pas un caractère de protection car il ne protège rien (d’ailleurs dans la page de manuel, il a une section majeure à lui tout seul).
L'erreur de nommer les caractères de protections, caractères d'échappement est très répandu (une petite recherche sur le net montre). Probablement cela provient de la terminologie des autres langages. Et de la lecture de la page
Wikipedia : Caractère d'échappement (mais regardez la section ASCII).
Pourtant bash à choisi de ne pas nommés les caractères de protection, caractères d'échappements, car il y a une bonne raison à cela :
Pour bash (et d'autres shell),
il n'existe qu'un seul caractère d'échappement c'est ESC (escape).
Il permet d'échapper une séquence de caractères (souvent nommée séquence d'échappement) à l'interprétation de bash (l'interpréteur). Afin de l'envoyer à la console (ou au terminal) pour qu'elle soit interprété par la console (ou le terminal)... Avec un exemple, ce que j'écris passera mieux :
Un usage fréquemment, est d'utiliser une séquence d'échappement pour formater du texte affiché (coloriage, mise en brillance, etc) .
Une séquence d’échappement débute toujours par le caractère d'échappement (ESC) qui est émulé par haha ce que bash nomme
les caractères protégés par contre oblique :
\e,
\033 (en octal),
\x1B (en hexa). Ou en caractères :
^[ . 27 en décimal.
echo -en "\e[91;1mDebian GNU Linux\e[0m "
printf "avec \033[34;1;5mDebian Facile\033[0m\n"
Debian GNU Linux avec Debian Facile
Remarque : C'est ainsi qu'est colorisé le prompt (echo $PS1)
Fermons la parenthèse et continuons ce pourquoi nous sommes là.
Section Caractères des variables de substitution prédéfinies
Sous ce titre est regroupé les paramètres positionnels, les paramètres spéciaux et une variable de l'interpréteur.
Tout programme (commande, suite de commande, etc,) possède des attributs (nom, paramètres, etc).
Ces attributs sont enregistrés pour chaque programme (commande) dans des variables.
On peut donc afficher chacun de ces attributs en se servant des paramètres spéciaux.
????
Puis est testé le paramètre spécial $# de façon étrange (après avoir exécuter une commande).
Section $ : appel de la valeur des variables d'environnement prédéfinies :
Modifier provisoirement la valeur d'une variable d'environnement
Là aussi, on utilise la commande export.
????
Modification provisoire de $PATH avec export :
Soit un fichier “essai-path” dans le répertoire de l'utilisateur.
Pour modifier provisoirement la valeur de $PATH on fait :
export PATH="$PATH:/chemin-absolu/vers/essai-path"
Après cette commande, si le fichier “essai-path” a pour chemin /home/toto/essai-path, le retour de la commande echo $PATH serait :
retour de la commande
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/toto/essai-path
Inutile d'utilisé export avec la variable PATH, elle est déjà exportée.
declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
Mais, pour l'exemple pourquoi pas.
Mais rhoooo, un chemin de fichier dans la variable PATH !!!
Testons cela tout de suite avec l'utilisateur DF.
mkdir ~/test
echo 'echo "coucou je suis exécuté"' > ~/test/coucou
chmod u+x ~/test/coucou
echo PATH=$PATH
PATH=$PATH:~/test/coucou
echo PATH=$PATH
coucou
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/DF/test/coucou
bash: coucou : commande introuvable
C'était à prévoir.
PATH=${PATH%/coucou}
echo PATH=$PATH
coucou
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/DF/test
coucou je suis exécuté
Haaa, avec un répertoire ça fonctionne beaucoup mieux
PATH=${PATH%:*}
echo PATH=$PATH
rm -rv ~/test
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
'/home/DF/test/coucou' supprimé
répertoire '/home/DF/test' supprimé
C'est la fin de la page et c'est bien car c'est suffisant.
Dernière modification par agp91 (23-02-2023 22:53:08)
La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.