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
#! /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?
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
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
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
Tags io-redirection