Un script que escribe en /tmp/rapport.txt termina creando un problema: otro lanzamiento puede ya estar utilizando este nombre, y un usuario local puede preparar un enlace simbólico en su lugar. mktemp crea el archivo o la carpeta con un nombre impredecible y lo reserva inmediatamente para el script.
Utiliza un archivo temporal para una salida intermedia y luego límpialo con trap. El script mantiene su directorio limpio incluso en caso de error o interrupción.

No fabriques el nombre con $$
Este antiguo hábito sigue siendo arriesgado:
tmp="/tmp/rapport-$$.txt"
echo "resultado" > "$tmp"
El PID no hace que el nombre sea secreto y el archivo no se crea en el momento en que lo calculas. Entre la construcción del camino y la escritura, otro proceso puede ocupar ese nombre. mktemp crea el objeto antes de devolverte su camino.
tmp_file=$(mktemp -p "${TMPDIR:-/tmp}" rapport.XXXXXX) || exit 1
printf '%sn' "resultado" > "$tmp_file"
El patrón debe contener al menos tres X consecutivos en su último componente. Los caracteres se reemplazan al crear. Siempre usa comillas alrededor de la variable: TMPDIR puede contener un espacio.
Crear una carpeta temporal para varios archivos
Una carpeta temporal evita dispersar varios archivos en /tmp. Es útil para un archivo a preparar, una conversión o un informe que produce archivos intermedios.
workdir=$(mktemp -d -p "${TMPDIR:-/tmp}" respaldo.XXXXXX) || exit 1
printf '%sn' "datos" > "$workdir/lista.txt"
tar -czf "$workdir/rapport.tar.gz" "$workdir/lista.txt"
La mayoría de los sistemas crean este directorio con derechos reservados a tu cuenta. Verifícalo cuando el script maneje una clave, una exportación o un archivo que contenga datos sensibles:
stat -c '%a %U:%G %n' "$workdir"
ls -la "$workdir"
Limpiar con trap sin borrar un camino incorrecto
Define la función de limpieza justo después de crear la carpeta. Asegúrate de que la variable existe y apunta al directorio esperado antes de llamar a rm -rf.
workdir=$(mktemp -d -p "${TMPDIR:-/tmp}" mi-script.XXXXXX) || exit 1
cleanup() {
[ -n "${workdir:-}" ] && [ -d "$workdir" ] && rm -rf -- "$workdir"
}
trap cleanup EXIT HUP INT TERM
# procesamiento del script aquí
trap ... EXIT inicia la limpieza cuando el shell termina. Las señales HUP, INT y TERM cubren las interrupciones habituales. Una parada brusca con kill -9 no le da tiempo al shell para ejecutar esta función, así que también se debe prever una limpieza controlada para procesos grandes.
- crea el camino con
mktemp, nunca con una fecha o$$; - usa
mktemp -dsi el script produce varios archivos; - elimina solo una variable creada y verificada por el script;
- mantén el archivo temporal si necesitas diagnosticar un fallo, luego elimínalo después del análisis.
La guía sobre el historial de Bash ayuda a evitar que una contraseña dada en una línea de comando permanezca en ~/.bash_history. Para archivar el resultado final, consulta también crear y extraer un archivo tar en Linux.