¿Qué hay de malo en este uso de la redirección?

¿Qué hay de malo en este uso de la redirección?
#! /bin/bash
for i in {A,B,C,D,E,F,G,H,J} ; do

     echo     "$i
               $i
               $i
               $i 
               $i
               $i
               $i
               $i"
    cat > ~/Desktop/$i.txt                    
done

Quiero crear 9 archivos de texto, cada uno de los cuales me muestra una letra repetida 8 veces. por ejemplo, A.txt debería tener la letra A 8 veces en una columna) Si ejecuto el script sin cat, de hecho me muestra 8 veces la letra A, luego 8 veces la B, C, etc. Al insertar la catdeclaración, no No funciona. ¿Qué estoy haciendo mal?

Respuesta1

Son dos comandos independientes.

echo something
cat > somewhere

Puedes usar pipe para pasar la salida estándar a la entrada estándar:

echo something | cat > somewhere

Respuesta2

Una solución simple a esto sería un bucle for doble de la siguiente manera:

for f in {A..J}; do for ((i=0;i<8;i++)); do printf '%s\n' "$f" >> "$f"; done; done

Respuesta3

Puedes usar secuencias bash para el bucle y un uso inteligente de printf para repetir caracteres:

for i in {A..J};do printf "$i%.0s\n" {0..7} > ~/Desktop/$i.txt;done

Respuesta4

ComoIpor SircerSeñaló que simplemente le falta una tubería entre su echoy cat. Otra solución sería utilizar yesrepetir el mismo texto de varias líneas y headen lugar de catlimitar el número de líneas, por ejemplo

for i in {A..J}
do
   yes -- "$i" | head -8 >  ~/Desktop/"$i".txt
done

información relacionada