Yeda AI Tips · #133

English

Nunca Construyas Comandos de Shell Como Cadenas

Estás a una variable sin comillas de borrar el directorio equivocado. Cuando tu agente de IA — o tu propio script — arma un comando como una cadena de texto, el shell tiene un segundo voto sobre lo que esa cadena significa. Un espacio suelto, una variable vacía o un nombre de archivo con un carácter de glob, y ejecuta algo que nunca escribiste.

Por qué las cadenas se parten

El shell no ejecuta la cadena que escribiste. Ejecuta la cadena después de la división en palabras (word splitting) y la expansión de rutas. Ambas ocurren en cada expansión sin comillas.

DIR="my project"
rm -rf $DIR        # ejecuta: rm -rf my project   → dos argumentos
rm -rf "$DIR"      # ejecuta: rm -rf 'my project' → un argumento

Peor aún, si $DIR está vacía o sin definir, rm -rf $DIR/ se convierte en rm -rf /. El comando se ve correcto en tu editor y es catastrófico en tiempo de ejecución. Esto es el Bash Pitfall #1 y #2: el resultado de una expansión sigue sujeto a la división en palabras y a la expansión de rutas, así que siempre pones comillas dobles en las expansiones de parámetros.

Los tres hábitos

HábitoEn vez deHaz esto
Listas de argumentoscmd="rm -rf $files"; $cmdargs=(-rf "$file"); rm "${args[@]}"
Cada expansióngrep $pat $filegrep "$pat" "$file"
Fallar rápido(sin protección)set -euo pipefail

Usa arreglos para las listas de argumentos. Un arreglo de Bash mantiene cada elemento como una palabra distinta sin importar espacios o valores vacíos. "${args[@]}" se expande exactamente a los elementos que pusiste — sin volver a dividir, sin globbing:

flags=(--exclude "*.log" --exclude "tmp dir")
rsync "${flags[@]}" "$src" "$dst"

Pon comillas en cada expansión por defecto. "$var", "${arr[@]}", "$(cmd)". El caso raro en que quieres división en palabras es la excepción que comentas; las comillas son el valor por defecto en el que ni piensas.

Falla rápido, no destruyas el estado en silencio

Arranca los scripts con el trío estricto:

set -euo pipefail

Juntos convierten un daño silencioso a medias en una salida temprana y ruidosa. set -u por sí solo habría atrapado el desastre de la $DIR vacía de arriba.

Notas para usuarios avanzados

Nunca construyas comandos en cadenas. Arma las listas de argumentos como arreglos, pon comillas en todo y deja que el script falle ruidosamente en el instante en que algo esté mal.

Recursos

¿Envías scripts que los agentes de IA escriben y ejecutan? Yeda AI audita y endurece la automatización de tu stack.

Hablemos · Más tips de programación con IA