Was ist falsch an dieser Verwendung der Umleitung?

Was ist falsch an dieser Verwendung der Umleitung?
#! /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

Ich möchte 9 Textdateien erstellen, in denen jeweils ein Buchstabe 8-mal wiederholt wird. Beispiel: A.txt sollte den Buchstaben A 8-mal in einer Spalte enthalten. Wenn ich das Skript ohne ausführe cat, zeigt es mir tatsächlich 8-mal den Buchstaben A, dann 8-mal den Buchstaben B, C usw. an. Beim Einfügen der catAnweisung funktioniert es nicht. Was mache ich falsch?

Antwort1

Es sind zwei unabhängige Befehle.

echo something
cat > somewhere

Sie können Pipe verwenden, um stdout an stdin zu übergeben:

echo something | cat > somewhere

Antwort2

Eine einfache Lösung hierfür wäre eine doppelte For-Schleife wie folgt:

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

Antwort3

Sie können Bash-Sequenzen für die Schleife verwenden und printf geschickt einsetzen, um Zeichen zu wiederholen:

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

Antwort4

AlsIpor Sircerechowies darauf hin, dass Ihnen lediglich ein Pipe-Zeichen zwischen Ihrem und fehlt cat. Eine andere Lösung wäre, yesdenselben Text über mehrere Zeilen zu wiederholen und headstatt catdie Anzahl der Zeilen zu begrenzen, z. B.

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

verwandte Informationen