Elegir espacio

Dos espacios

¿Qué quieres consultar?

Elige el espacio al que quieres entrar.

Recorrido · SistemasSYS-L-102

Sistemas · SYS-L-102 · Laboratorio · ET

Componer un pipeline sin ocultar fallos

Un productor emite registros normalizados por stdout, diagnósticos por stderr y un estado no cero cuando encuentra una fila inválida. Debes filtrar avisos sin mezclar ni perder esas señales.

Contenido de la actividad

ET · Directorio temporal de usuario con fixture Bash determinista; sin red, servicios ni privilegios.

Capacidad

Diseñar y explicar un pipeline corto que preserve datos, diagnósticos y estado de salida como evidencias independientes.

Enunciado

Trabaja con el fixture preparado, predice el recorrido de los tres flujos y construye una composición que permita diferenciar una ejecución limpia, una ausencia de coincidencias y un error del productor.

Estado inicial

  • Cuatro archivos descargables: productor, datos, marcador y reset acotado.
  • El productor solo lee el archivo indicado y escribe en stdout/stderr; no modifica el sistema.
  • El archivo de datos incluye una ejecución válida y una variante de error seleccionable mediante argumento.
  • No se proporciona una línea final de solución ni un check que revele la respuesta.

Límites del sandbox

  • Crea un directorio temporal fuera del repositorio y copia allí los materiales.
  • No uses sudo, no instales paquetes y no sustituyas el fixture por archivos del sistema.
  • Inspecciona los scripts antes de conceder permiso de ejecución.
  • No uses `eval` ni construyas comandos concatenando datos del fixture.
  • El reset solo es válido si el marcador exacto está presente en el directorio actual.

Fases de trabajo

1. Preparar e inspeccionar

Establecer un entorno desechable y comprender el contrato del fixture.

  1. Crea un directorio temporal y mueve o copia allí los cuatro materiales.
  2. Lee el productor y el reset antes de ejecutarlos.
  3. Renombra `sys-l-102-fixture.txt` como `.sys-l-102-fixture`.
  4. Concede permiso de ejecución solo a esos dos scripts.
attempt_dir="$(mktemp -d -t sys-l-102.XXXXXX)"
printf "intento=%s\n" "$attempt_dir"
cd "$attempt_dir"
mv -- ./sys-l-102-fixture.txt ./.sys-l-102-fixture
chmod u+x ./sys-l-102-producer.sh ./sys-l-102-reset.sh

2. Predecir y observar por separado

Conocer el comportamiento base antes de componer.

  1. Escribe qué esperas en stdout, stderr y estado para cada modo.
  2. Ejecuta primero sin pipe y captura el estado inmediatamente.
  3. Repite redirigiendo stdout y stderr a archivos distintos.
./sys-l-102-producer.sh ./sys-l-102-events.tsv clean
status=$?
printf "estado=%s\n" "$status"
./sys-l-102-producer.sh ./sys-l-102-events.tsv invalid > producer.out 2> producer.err
status=$?

3. Componer sin ocultar

Filtrar datos y conservar el fallo del productor.

  1. Construye un pipeline que seleccione `level=WARN` sin introducir stderr en los datos.
  2. Comprueba qué estado entrega la shell por defecto.
  3. Activa `pipefail` en el intento, repite y captura el estado de inmediato.
  4. Explica la diferencia; no la reduzcas a «funciona/no funciona».

4. Reiniciar el intento

Probar que la limpieza conserva un alcance exacto.

  1. Revisa la lista de archivos que creó tu ejecución.
  2. Ejecuta el reset incluido desde el directorio marcado.
  3. Comprueba que los materiales originales siguen presentes y las salidas generadas no.
./sys-l-102-reset.sh
find . -maxdepth 1 -type f -print

Evidencia que debes conservar

  • Predicción inicial para los modos clean e invalid.
  • Comando final del pipeline y versión de shell utilizada.
  • Fragmentos mínimos de stdout, stderr y estados capturados.
  • Explicación de la diferencia con y sin pipefail.
  • Evidencia del reset y una limitación del pipeline propuesto.

Criterios de aceptación

  • El fixture se ejecuta en un directorio temporal fuera del checkout y sin sudo.
  • La solución conserva stdout de datos y stderr de diagnóstico en destinos identificables.
  • El estado se captura antes de ejecutar otro comando.
  • Un fallo del productor no queda oculto por el último filtro del pipeline.
  • Las variables de ruta se expanden con quoting y los comandos documentan el uso de `--` cuando corresponde.
  • La interpretación explica el contrato asumido por cada estado y no depende solo de que exista un archivo de salida.
  • El reset actúa únicamente sobre los archivos generados por el fixture marcado.

Decisiones abiertas

  • Elegir `grep`, `awk` u otra utilidad documentada para el filtro.
  • Guardar diagnósticos en archivo o duplicarlos deliberadamente a terminal y archivo.
  • Añadir una comprobación de salida vacía sin confundirla con error.

Materiales

Se guarda solo en este navegador. Puedes descargarlo para enviarlo a Codex junto con los materiales que hayas completado.

Sin borrador guardado.

Revisión y reinicio

Revisión: Codex debe comparar la evidencia con estos criterios, señalar primero el supuesto no demostrado y proponer una sola comprobación siguiente. No hay una solución oficial publicada.

Reinicio: Ejecutar `./sys-l-102-reset.sh` dentro del directorio que contiene `.sys-l-102-fixture`; el script rechaza cualquier otro directorio y solo borra tres salidas nombradas.

Pistas graduadas

Pista 1 · No mezcles los diagnósticos
  • El pipe ordinario recibe stdout.
  • Decide explícitamente dónde debe quedar stderr antes de añadir el filtro.
Pista 2 · Captura inmediatamente
  • Cualquier comando posterior sustituye `$?`.
  • El estado por defecto de un pipeline no resume necesariamente al productor.
Pista 3 · Compara contratos
  • Una ausencia de coincidencias puede tener un estado distinto de un error.
  • Consulta el manual del filtro antes de etiquetar ambos resultados.