Uutils coreutils añade diagnostics tipo compilador a sus errores
La nueva versión 0.11.0 de uutils coreutils muestra errores con carets y ayuda contextual, como los compiladores. El objetivo es facilitar la depuración de argumentos que son mini‑lenguajes.
Cambios de la versión 0.11.0
Uutils coreutils ha incorporado en su última versión 0.11.0 un mecanismo de diagnóstico que muestra la línea de entrada, un caret que indica el carácter problemático y una línea de ayuda con la sintaxis correcta. El comportamiento se activa cuando la salida estándar de error está conectada a un terminal.
Ejemplos concretos
- tr
Antes:
tr $ tr 'qw[y-b]' x
tr: range-endpoints of 'y-b' are in reverse collating sequence order
Después:
tr $ 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
- cut
Antes:
cut $ cut -f 1,4-2,9-12 notes.txt
cut: invalid decreasing range
Después:
cut $ cut -f 1,4-2,9-12 notes.txt
cut: invalid decreasing range
╭─[ cut:1:10 ]
│ 1 │ cut -f 1, 4-2 ,9-12 notes.txt
│ ─┬─
╰─── this range ends before it starts
│ Help : a list is N, N-M, N- or -M, separated by commas, as in -f1,4-6,9-
- chmod
Antes:
chmod $ chmod 'g+rw?x' notes.txt
chmod: invalid operator (expected +, -, or =, but found ?)
Después:
chmod $ chmod 'g+rw?x' notes.txt
chmod: invalid operator (expected +, -, or =, but found ?)
╭─[ chmod:1:5 ]
│ 1 │ g+rw ? x notes.txt
│ ─ │
│ Help : a mode is either octal, as in 644, or clauses such as u+rwx,go-w
- sort
Antes:
sort $ sort -k2.3x notes.txt
sort: stray character in field spec: invalid field specification '2.3x'
Después:
sort $ sort -k2.3x notes.txt
sort: stray character in field spec: invalid field specification '2.3x'
╭─[ sort:1:11 ]
│ 1 │ sort -k2.3 x notes.txt
│ ─ │
│ Help : a key is FIELD[.CHAR][OPTS][,FIELD[.CHAR][OPTS]], as in -k2.3,4nr
El mismo patrón de reporte se aplica a comandos como env, test, head, numfmt, csplit y muchos más. En todos los casos el mensaje incluye la posición exacta del error y una explicación breve.
Impacto en la práctica
Para un administrador de sistemas o un desarrollador que depura scripts de shell, la mejora reduce el tiempo de diagnóstico de argumentos mal formados. La sintaxis de los mensajes se alinea con la de los compiladores Rust y la librería ariadne, lo que facilita la transición para quienes ya están acostumbrados a esos patrones.
El proyecto sigue siendo open source bajo la licencia MIT, y el código de la nueva capa de diagnóstico está en el repositorio de GitHub de uutils. Se puede habilitar o deshabilitar con la variable de entorno UUTILS_DEBUG.
Qué sigue
La comunidad de uutils ya está evaluando extender el soporte a más comandos y a la salida de error no interactiva (cuando stderr no sea un terminal). La próxima versión debería incluir pruebas de regresión para garantizar que los mensajes antiguos no cambien inesperadamente.
Para probar los nuevos mensajes, se puede usar el playground de la documentación o instalar la última versión con cargo install uutils-coreutils.
El cambio es relevante porque el error ahora indica la posición exacta del fallo, lo que simplifica la corrección en scripts complejos y mejora la experiencia de depuración.
