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