Files
lespiedsdanslecode/content/2022/2022-01-24/index.md
T
2022-06-14 14:54:58 +02:00

38 lines
2.1 KiB
Markdown

---
title: Lundi 24 janvier 2022
---
[Core Team] Officier Azarov:drapeau_arc_en_ciel: Hier à 17 h 34
Salut ! Je suis un cours à la fac et je bute sur une question de shell assez basique.
Si quelqu'un·e peut m'éclairer, je suis preneuse !
L'énoncé :
Dupont a fait une erreur de frappe, il a saisie la commande mv a b/* au lieu de mv b/* a.
Que se passe-t-il si b est un répertoire contenant 3 sous-répertoires et aucun autre fichier ? Expliquez pourquoi cela se produit.
Dans mon terminal :
J'ai un répertoire a et un répertoire b, qui a lui-même 3 sous-répertoires : c, d et e. Soit visuellement :
a
b
c
d
e
Quand je tape mv a b/*, a est déplacé dans un des sous-répertoires de b (le dernier, selon l'ordre alphabétique). Les deux autres sous-répertoires de b sont déplacés dans ce sous-répertoire également. Soit visuellement :
b
e
a
c
d
Est-ce qu'une bonne âme aurait une idée de pourquoi ça arrive ? (et aussi, déjà, avez-vous les mêmes résultats chez vous ?) (interrogations existentielles, bonsoir)
Anh-Vu il y a 14 heures
hello, le comportement que tu observes est tout à fait normal et déterministe, heureusement ! dans ton shell b/* est remplacé par la liste des répertoires b/c b/d b/e avant d'appeler la commande mv . Aussi le dernier argument de mv est le répertoire de destination. Donc quand tu appelles
mv a b/*
le shell traduit en
mv a b/c b/d b/e
et mv comprend qu'il faut déplacer a b/c b/d dans b/e
Aussi le shell assure que le remplacement de b/* est dans l'ordre alphabétique des occurences trouvées (modifié)
En général, un bout de code est analysé à partir de la droite (c'est un raccourci que je prends). Par contre, c'est vrai qu'il faut savoir que b/* est une expression qui va être évalué... c'est pas forcement évidant :slightly_smiling_face: (et j'ajoute ceci parce que le shell est un langage de programmation comme un autre, à ceci prêt que l'on passe notre temps dans son interpréteur à écrire une instruction à la fois et rarement dans un fichier à écrire plusieurs ligne, contrairement aux autres langages :))