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

1
#! /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

Eu quero fazer 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 mostra 8 vezes a letra A, depois 8 vezes o B, C, etc. Ao inserir a instrução cat , ela não funciona. O que estou fazendo errado?

    
por Diego 27.10.2016 / 16:01

4 respostas

1

Eles são dois comandos independentes.

echo something
cat > somewhere

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

echo something | cat > somewhere
    
por 27.10.2016 / 16:05
1

Uma solução simples para isso seria um double for loop da seguinte forma:

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

Você pode usar seqüê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
    
por 27.10.2016 / 16:19
1

Como Ipor Sircer apontou, você está perdendo um pipe entre seu echo e cat . Outra solução seria usar yes para repetir o mesmo texto de várias linhas e head em vez de cat para limitar o número de linhas, por ex.

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