Что случилось с этим использованием перенаправления?

#! /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 , он действительно показывает мне 8 раз букву A, затем 8 раз B, C и т. д. Когда вы вставляете оператор cat , он не работает. Что я делаю не так?

  • Почему перенаправление STDERR на / dev / null выполняется таким образом?
  • Как вы помните синтаксис для перенаправления 2> и 1
  • Почему некоторые linux-инструменты записывают в STDERR вместо STDOUT по умолчанию?
  • Перенаправить вывод программы в файл не удается
  • Почему я могу добавить файл, но не перезаписать его?
  • io перенаправление на «крест» 2 программы
  • io перенаправление на «крест» 2 программы
  • Почему я могу добавить файл, но не перезаписать его?
  • Почему перенаправление STDERR на / dev / null выполняется таким образом?
  • Когда следует использовать перенаправление ввода?
  • Перенаправить вывод программы в файл не удается
  • Почему некоторые linux-инструменты записывают в STDERR вместо STDOUT по умолчанию?
  • 4 Solutions collect form web for “Что случилось с этим использованием перенаправления?”

    Это две независимые команды.

     echo something cat > somewhere 

    Вы можете использовать pipe для передачи stdout в stdin:

     echo something | cat > somewhere 

    Простым решением для этого будет двойной цикл:

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

    Вы можете использовать последовательности bash для цикла и умное использование printf для повторения символов:

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

    Как указал Ipor Sircer , вам просто не хватает трубы между вашим echo и cat . Другим решением могло бы быть использование yes для повторения одного и того же текста нескольких строк и head вместо cat чтобы ограничить количество строк, например

     for i in {A..J} do yes -- "$i" | head -8 > ~/Desktop/"$i".txt done 
    Linux и Unix - лучшая ОС в мире.