Les jokers du shell

Les motifs *, ?, [abc], [a-z], [!abc] et les accolades, les fichiers cachés que * ignore, le fait que c'est le shell qui développe les motifs avant de lancer la commande, et le rôle des guillemets.

  • 23 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Joker * : de quoi s'agit-il ?

    Voir la réponse

    Motif remplacé par tous les noms de fichiers existants qui correspondent, avec n'importe quelle suite de caractères (même vide) à sa place.

    *.txt correspond à a.txt et à rapport final.txt, mais pas à .cache.txt : un nom qui commence par un point doit être écrit avec son point (.*).

  • Un répertoire contient photo1.jpg, photo2.jpg, photo9.jpg, photo10.jpg et photo1.png. Que développe photo[1-9].jpg ?

    • photo1.jpg photo2.jpg photo9.jpg
    • photo1.jpg photo2.jpg photo9.jpg photo10.jpg
    • photo1.jpg photo2.jpg photo9.jpg photo1.png
    • photo1.jpg photo10.jpg
    Voir la réponse

    photo1.jpg photo2.jpg photo9.jpg

    La classe [1-9] correspond à un seul caractère : photo10.jpg en a deux entre photo et .jpg, et photo1.png n'a pas la bonne extension.

  • Les jokers sont développés par le …, avant le lancement de la commande : ls *.txt reçoit déjà la ….

    Voir la réponse

    Les jokers sont développés par le shell, avant le lancement de la commande : ls *.txt reçoit déjà la liste des noms.

    echo *.txt montre ce que verrait n'importe quelle commande. La commande ne sait pas si l'utilisateur a tapé un joker ou les noms.

  • Joker ? : de quoi s'agit-il ?

    Voir la réponse

    Motif qui correspond à exactement un caractère, quel qu'il soit.

    photo?.jpg attrape photo1.jpg et photoA.jpg, mais pas photo10.jpg (deux caractères) ni photo.jpg (aucun).

  • Dans un répertoire sans aucun .zip, rm *.zip répond « rm: cannot remove '*.zip': No such file or directory ». Que s'est-il passé ?

    • Aucun nom ne correspondait : bash a laissé *.zip tel quel et rm a cherché ce nom littéral
    • Le shell n'a pas le droit de développer les jokers dans ce répertoire
    • Les fichiers .zip sont cachés, et * ne les attrape donc jamais
    • rm ne comprend pas les jokers : il faut find -name pour supprimer
    Voir la réponse

    Aucun nom ne correspondait : bash a laissé *.zip tel quel et rm a cherché ce nom littéral

    Un motif qui ne correspond à rien reste tel quel (comportement par défaut de bash). C'est donc rm qui voit le nom *.zip et se plaint qu'il n'existe pas : un nom de fichier légitime (mais très rare) peut contenir une étoile.