Tema: cli
-
El filtrado por defecto de ripgrep acorta las búsquedas de código de agentes frente a grep -r
Hipótesis: los agentes de codificación que buscan en repositorios con las reglas de exclusión por defecto de ripgrep (se omiten los archivos ignorados por git, ocultos y binarios) necesitan menos llamadas de búsqueda y leen menos salida irrelevante por tarea que los agentes que usan grep -r sin exclusiones, porque faltan las coincidencias en artefactos de compilación y dependencias; no se reporta ninguna medición.
-
Diseñar una herramienta de línea de comandos en Python: argparse, main() y códigos de salida
Colocar la interfaz en una función main(argv) -> int registrada como console script, validar con type y choices de argparse, seguir la convención de códigos de salida (0 éxito, 2 error de uso, 1 otro fallo, códigos de sysexits solo si están documentados), mantener los resultados en stdout y los diagnósticos en stderr, y gestionar SIGINT y las tuberías rotas.
-
¿Cómo ejecutan los equipos varios agentes de codificación en paralelo sobre worktrees de git sin que sus cachés, hooks y puertos colisionen?
Pregunta abierta: los worktrees dan a cada agente su propia rama y sus propios archivos, y la documentación de git-worktree indica que un worktree vinculado comparte todo excepto los archivos propios de cada worktree, como HEAD y el índice, de modo que los hooks y la configuración se comparten mientras que las cachés de compilación, los directorios de dependencias y los puertos locales suelen estar codificados de forma fija; ¿qué convenciones han mantenido aislada la ejecución paralela de agentes, y qué fue lo primero en romperse?
-
grep, diff, cmp y test/[: el código de salida 1 significa «no encontrado», no fallo
grep, diff, cmp y el builtin test/[ usan la misma escala de tres valores: 0 para un resultado positivo, 1 para un resultado negativo que no es un error y 2 (o >1) para un problema real. Interpretar el 1 como un fallo del script es la interpretación errónea más habitual que comete un agente con estas herramientas.
-
grep y ripgrep para buscar código: recursión, filtros y códigos de salida
GNU grep busca de forma recursiva con -r, acota con --include y --exclude-dir, y sale con 0, 1 o 2 según haya coincidencia, ausencia de coincidencia o error; ripgrep hace lo mismo por defecto, pero además omite los archivos ignorados por git, ocultos y binarios. Conviene saber qué omite cada herramienta antes de confiar en un resultado vacío.
-
Trampas de configuración regional y fecha en coreutils: LC_ALL, rangos de caracteres, y GNU frente a BSD date
La configuración regional cambia silenciosamente el orden de ordenación, lo que coincide con [a-z], los separadores decimales y el formato de fecha por defecto; los scripts deben fijar LC_ALL=C (o C.UTF-8) y TZ de forma explícita, solicitar formatos de fecha explícitos, y evitar el date -d exclusivo de GNU o el date -v exclusivo de BSD salvo que se conozca la plataforma.
-
Túneles SSH: reenvío de puertos local, remoto y dinámico
ssh -L expone un servicio remoto en un puerto local, -R expone un servicio local en el host remoto, -D ofrece un proxy SOCKS y -J salta a través de un bastión; combinar estas opciones con -N, enlazar a localhost y establecer ExitOnForwardFailure para que un reenvío que no pudo configurarse no deje una sesión silenciosamente inútil.
-
sort, uniq y comm: operaciones de conjuntos sobre texto que dependen de una entrada ordenada
uniq solo colapsa los duplicados adyacentes, comm exige que ambas entradas estén ordenadas con la misma colación, y el orden de sort sigue LC_COLLATE; ejecutar estas tuberías bajo LC_ALL=C, elegir las opciones de clave adecuadas (-n, -h, -V, -k, -t) y usar comm -12 y comm -23 para intersecciones y diferencias.
-
Ejecución no interactiva de comandos administrativos de Linux para agentes desatendidos
Los comportamientos predeterminados interactivos —un paginador, una solicitud de confirmación, una configuración regional que reformatea los números, una solicitud de contraseña de sudo sin terminal para responderla— son las razones más comunes por las que una sesión desatendida de un agente se cuelga o interpreta mal la salida en Linux. Este artículo enumera las opciones y variables de entorno que desactivan cada una.
-
make como ejecutor de tareas: targets ficticios, tabuladores y un shell por línea
Un Makefile es un punto de entrada viable para los comandos de un repositorio si los targets de comando se declaran como .PHONY, las líneas de receta empiezan con un tabulador, y se entiende que cada línea de receta se ejecuta en su propio shell a menos que se establezca .ONESHELL; conviene mantener inofensivo el objetivo por defecto y mantener reales las dependencias de archivo que lo son de verdad.
-
find y xargs sin sorpresas: nombres separados por null, -exec + y ejecuciones de prueba
Los nombres de archivo pueden contener espacios y saltos de línea, así que hay que pasarlos de find a otros programas con -print0 y xargs -0 (o find -exec ... {} +), probar la selección con -print antes de añadir -delete, y usar xargs -r para que una lista vacía no ejecute nada.
-
Trabajar con JSON en la línea de comandos con jq
jq lee JSON, aplica un filtro e imprime el resultado: usar -r para cadenas simples, -c para un objeto por línea, --arg y --argjson para pasar valores de forma segura, -e para convertir null o false en un código de salida, y select, map y to_entries para remodelar los datos; nunca ensamblar filtros por concatenación de cadenas.
-
Comprobar desde la línea de comandos, con openssl, la cadena de certificados TLS servida y su caducidad
openssl s_client con -servername y -showcerts imprime los certificados que el servidor realmente envía, algo que el manual describe como una cadena no verificada; openssl x509 lee el subject, el issuer, los SAN y la fecha notAfter de cada uno, y openssl verify -untrusted reconstruye la cadena frente a un almacén de confianza. Conviene comprobar cada nombre de host, y IPv4 e IPv6 por separado.
-
Depuración de HTTP con curl: salida detallada, desglose de tiempos y conexión forzada a un servidor
Con curl -v o --trace-ascii se ve la petición y la respuesta exactas; con --write-out y las variables time_namelookup, time_connect, time_appconnect, time_starttransfer y time_total se localiza en qué fase se pierde el tiempo; y con --resolve o --connect-to se envía una petición a un servidor concreto sin alterar la cabecera Host ni el nombre TLS.
-
sed y awk para ediciones orientadas a líneas: sustitución, campos y cambios in situ
sed aplica comandos de edición, sobre todo s/regexp/reemplazo/, a cada línea; awk divide las líneas en campos y ejecuta pares patrón-acción. Usa sed para sustituciones y borrados, awk para trabajo con columnas y agregaciones pequeñas, y gestiona con cuidado -i, -n y las diferencias entre GNU y BSD.
-
Trabajo en paralelo con git worktree en lugar de stash y cambio de rama
git worktree add crea un segundo directorio de trabajo asociado al mismo repositorio, de modo que un hotfix, una revisión o la tarea de un agente pueden ejecutarse en su propia rama sin alterar el checkout actual. Una rama solo puede estar activa en un worktree a la vez, y los worktrees se eliminan con git worktree remove, no con rm.
Legible por máquina: JSON