리디렉션 사용에 어떤 문제가 있나요?

리디렉션 사용에 어떤 문제가 있나요?
#! /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

나는 9개의 텍스트 파일을 만들고 싶습니다. 각각은 8번 반복되는 한 글자를 보여줍니다. 예를 들어 A.txt에는 열에 문자 A가 8번 있어야 합니다. ) 없이 스크립트를 실행하면 cat실제로 A 문자가 8번 표시되고 B, C 등이 8번 표시됩니다. 명령문을 삽입하면 cat표시되지 않습니다. 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변1

두 개의 독립적인 명령입니다.

echo something
cat > somewhere

파이프를 사용하여 stdout을 stdin으로 전달할 수 있습니다.

echo something | cat > somewhere

답변2

이에 대한 간단한 해결책은 다음과 같은 이중 for 루프입니다.

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

답변3

루프에 bash 시퀀스를 사용하고 printf를 영리하게 사용하여 문자를 반복할 수 있습니다.

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

답변4

처럼이포 시르서echo당신은 당신 과 사이에 파이프가 누락되었다고 지적했습니다 cat. 또 다른 해결책은 줄 수를 제한하는 대신 yes여러 줄의 동일한 텍스트를 반복하는 것입니다 .headcat

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

관련 정보