veilletech.fr
6 sept. Feed du jour
#08 OUTILS Article

Coreutils montre où l'erreur se trouve

Cinquante ans de messages sur une ligne. Et enfin un curseur dessous.

Depuis la version 0.11.0, uutils coreutils affiche ses erreurs d'analyse comme un diagnostic de compilateur : la commande est réaffichée, un curseur pointe l'argument ou le caractère fautif, et une ligne d'aide rappelle la syntaxe. Le rendu passe par la bibliothèque ariadne, et n'apparaît que lorsque la sortie d'erreur est un terminal. 28 utilitaires en bénéficient.

2 min de lecturedébutantvidéo 1:09
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. À quoi ça ressemble
  3. Ce que ça change concrètement
  4. À retenir

Ce qui se passe

Un outil Unix signale ses erreurs sur une ligne d'erreur standard. Cette ligne dit ce qui ne va pas, jamais . Pour la plupart des commandes il n'y a rien à pointer — mais quelques-unes prennent des arguments qui sont de petits langages : une expression test, un mode chmod, une clé de tri, une liste de champs pour cut.

Depuis la version 0.11.0, uutils coreutils — la réécriture en Rust des coreutils GNU — répond à cette question comme le fait rustc : avec un curseur sous le fautif. Le rendu s'appuie sur la bibliothèque ariadne, et l'idée vient de uutils awk, qui procédait déjà ainsi pour les programmes awk.

À quoi ça ressemble

Le message historique reste imprimé, et le rapport vient dessous :

TEXT
$ tr 'qw[y-b]' x
tr: range-endpoints of 'y-b' are in reverse collating sequence order
   ╭─[ tr:1:7 ]
 1 │ tr qw[y-b] x
   │       ─┬─
   │        ╰─── did you mean 'b-y'?
   │ Help: a range goes from the lower character to the higher one, as in a-z
───╯

L'ancien message parlait d'ordre de séquence de collation — utile si vous savez déjà ce que c'est. Le rapport, lui, souligne l'intervalle et propose l'inversion.

Le curseur n'est pas obligé de couvrir un argument entier : sur chmod 'g+rw?x', il désigne le seul ?. Sur cut -f 1,4-2,9-12, il isole 4-2 dans une liste longue au lieu d'annoncer une erreur globale. Sur head -c 1fb, il distingue laquelle des deux moitiés — le nombre ou l'unité — a été rejetée.

Ce que ça change concrètement

28 utilitaires en bénéficient en 0.11.0. Parmi eux : test, expr, chmod, mkdir, mkfifo, mknod, install, tr, sort, numfmt, printf, seq, stat, env, dd, join, cut, csplit.

Deux détails d'implémentation valent d'être notés, parce qu'ils décident de l'adoption :

Un seul analyseur traite toutes les tailles de la suite : le même rapport apparaît donc pour tail -c, truncate -s, split -b, shred -s, od -N, sort -S, les tailles de bloc de du -B, df -B, ls --block-size et le seuil de du -t.

À retenir

Ces commandes ne sont plus une curiosité : elles remplacent les coreutils GNU par défaut dans plusieurs distributions récentes, donc le changement finira par arriver sans que vous l'ayez demandé. Le billet est signé Sylvestre Ledru et daté du 31 août 2026 ; chaque exemple est rejouable dans le bac à sable WebAssembly du site.

Source : uutils