O que há de errado com esse uso de redirecionamento?

O que há de errado com esse uso de redirecionamento?
#! /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

Quero criar 9 arquivos de texto, cada um mostrando uma letra repetida 8 vezes. por exemplo , A.txt deve ter a letra A 8 vezes em uma coluna) Se eu executar o script sem o cat, ele realmente me mostrará 8 vezes a letra A, depois 8 vezes o B, C, etc. catnão funciona. O que estou fazendo de errado?

Responder1

São dois comandos independentes.

echo something
cat > somewhere

Você pode usar o pipe para passar o stdout para o stdin:

echo something | cat > somewhere

Responder2

Uma solução simples para isso seria um loop for duplo como segue:

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

Responder3

Você pode usar sequências bash para o loop e uso inteligente de printf para repetir caracteres:

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

Responder4

ComoSircer Iporapontou que você está faltando apenas um cano entre você echoe cat. Outra solução seria yesrepetir o mesmo texto em múltiplas linhas e headem vez de catlimitar o número de linhas, por exemplo

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

informação relacionada