Commande "cd" (change directory) et ses options cachées.

Forum de support pour les utilisateurs francophones

Moderator: Laurent85

Forum rules
Topics in this forum are automatically closed 6 months after creation.
Post Reply
CasualMint
Level 2
Level 2
Posts: 59
Joined: Mon Feb 05, 2024 5:38 pm

Commande "cd" (change directory) et ses options cachées.

Post by CasualMint »

Bonjour.

Je débute avec Linux et je prend du temps a comprendre les utilisation de ligne de commande avec les Manpages des différentes commande.

Cependant je me suis intéressé a la commande cd (change directory).
La commande "cd --help" nous renvoi bien à l'aide de l'utilisation de cd. "man cd" n'existe pas.

Néanmoins la commande "cd -" permet de ciblé le chemin précédent de la commande "cd" dans l'arborescence des répertoire n'est pas noté dans l'aide et donc le symbole "-" n'est indiquer nul part.
Je ne comprend pas trop car dans l'aide rien n'est indiquer.

Je voudrais savoir comment s’appelle les caractères pouvant être utiliser librement comme le "-" et si il y a d'autre caractères comme celui-ci pouvant être utiliser en généralité avec d'autres commandes.

J'ai fais une recherche sur les métacaractères et ils ne sont pas concernés.

Merci.
Shiva
Level 3
Level 3
Posts: 141
Joined: Thu Jul 07, 2022 11:25 am

Re: Commande "cd" (change directory) et ses options cachées.

Post by Shiva »

CasualMint wrote: Thu Feb 08, 2024 6:17 pm La commande "cd --help" nous renvoi bien à l'aide de l'utilisation de cd. "man cd" n'existe pas.
Il n'y a pas d'options cachées pour cd pour la bonne raison qu'il n'y a pas d'option du tout. Ce qui suit cd se nomme argument ou paramètre. Une option modifie la manière dont une commande se comporte (par exemple ls et ls -l).

L'argument n'est pas traité par cd, mais par le shell (Bash par défaut) en plusieurs phases :
1) décomposition de la ligne de commande en "mots", c'est-à-dire en unités séparées par des espaces ou des débuts/fins de ligne. C'est pour cela que si un argument unique comporte des espaces, il faut le mettre entre quotes simples ' ' ou doubles " ", sinon il est interprété comme plusieurs arguments différents.

2) Expansion ou développement de la ligne de commande.
Certains mots sont remplacés par des équivalents : les plus courants sont les remplacements des variables précédées du signe $ par leur valeur et les caractères spéciaux tels que . .. - / ~
Lorsque l'on démarre le shell (terminal), une variable globale $PWD est initialisée et qui contient le répertoire courant (echo $PWD l'affiche à l'écran). Dès que l'on fait joujou avec cd, une seconde variable nommée $OLDPWD (visible avec echo $OLDPWD) est créée et ces 2 variables sont constamment mises à jour pendant la promenade dans les répertoires. Bash résout ainsi les caractères spéciaux :
. signifie mettre à cet endroit la valeur de $PWD
.. signifie mettre à cet endroit la valeur de $PWD en lui coupant sa dernière branche (=remonter dans l'arborescence).
- signifie signifie mettre à cet endroit la valeur de $OLDPWD
/ signifie mettre à cet endroit la valeur du répertoire racine.
~ signifie mettre à cet endroit la valeur du répertoire de l'utilisateur.

3) Une fois l'expansion et le développement terminés, la ligne de commande ainsi construite est passée à la commande proprement dite qui ne voit jamais la version courte (celle que l'on entre au clavier), mais uniquement la version expansée.

Ces caractères spéciaux ne sont pas réservés à cd, mais utilisables par toutes les commandes. Par exemple, si l'on va dans le répertoire Documents avec

Code: Select all

cd Documents
On peut à partir de là, lancer :
ls . (ou même ls tout court puisque le paramètre par défaut est le répertoire courant) pour lister le contenu du répertoire courant.
ls .. pour lister le contenu du répertoire utilisateur, mais seulement parce qu'il est le parent du répertoire Document.
ls ~ pour lister le contenu du répertoire utilisateur.
ls / pour lister le contenu du répertoire racine.

Du fait que ls accepte de (vraies) options, il y a une petite nuance pour lister le répertoire précédent qui est de mettre un tilde devant :
ls ~- liste le répertoire précédent.
alors que ls - renvoie une erreur car ls attend une option (par exemple, -l pour lister les noms longs).

Cela fonctionne aussi pour des commandes bien plus évoluées. Si on se place au début du répertoire racine à l'ouverture du terminal avec :
cd /

et qu'on entre :

Code: Select all

find ~- -type f -name "*pdf"
la recherche de fichiers pdf ne portera pas sur le répertoire racine courant, mais sur le répertoire précédent, autrement dit le répertoire utilisateur (find acceptant des options, il a aussi besoin du tilde).

Et tous ces mystères et bien d'autres sont révélés entre autres dans le manuel BASH de Debian en VF (même s'il s'agit de la version 5.1 alors que LM a la 5.2 mais vu que la compatibilité arrière est garantie, tout ce qui est valable pour la 5.1 l'est pour la 5.2). On y retrouve aussi l'aide des commandes intégrées (= qui font partie du shell proprement dit et ne sont pas exécutées à partir d'un binaire) telles que cd.

https://manpages.debian.org/bullseye/ma ... .1.fr.html

et en remontant dans l'arborescence de cette page (c-à-d en cliquant sur le manpages-fr juste après Bullseye en haut à gauche), on accède à toutes les pages de manuel qui ont été francisées.
CasualMint
Level 2
Level 2
Posts: 59
Joined: Mon Feb 05, 2024 5:38 pm

Re: Commande "cd" (change directory) et ses options cachées.

Post by CasualMint »

Merci.

Donc si j'ai bien compris sans argument de la commande "cd" succédant directement à "-" la ligne de commande dans le terminal est renvoyé à l’outil "bash".

J'ai aussi remarquer que certains argument disponible dans "man apt-get" par exemple étaient valable avec "apt" alors que "man apt" n'y mentionne aucunes options. Comment cela est possible.

(J'ai un soucis avec le dictionnaire fr de Mozilla. A chaque nouvelle session il active le dictionnaire anglais qui j'ai supprimé..)

Ta réponse est consistante merci :) et la documentation est bien aussi.
Post Reply

Return to “Français - French”