Скрипт BASH для быстрого создания и заполнения новых тестовых файлов - PullRequest
3 голосов
/ 24 ноября 2010
# for i in {1..5} do echo "New File $i" > file$i done
-bash: syntax error near unexpected token `>'

Я пробовал приведенный выше однострочный скрипт, который потерпел неудачу с ошибкой выше. Я пытаюсь автоматизировать процесс набора:

echo "New File" > file1  
echo "New File" > file2  
echo "New File" > file3  
echo "New File" > file4  
echo "New File" > file5  

Я пытаюсь сделать это без создания файла сценария, например, приведенного ниже, который работает:

#!/usr/bin/env bash                                                                                                                                                                                       
for i in {1..5} 
  do  
    echo "New File $i" > file$i 
  done

Этот скрипт работает, но я хочу иметь возможность сделать что-то подобное в одной строке из командной строки.

Я понимаю, что проблема связана с перенаправлением > к файлу. Я пытался избежать перенаправления > еще нескольких вещей и гуглить, но я не нашел ничего, что сработало.

Причина, по которой я хочу сделать это в одной строке в cli, заключается в том, что я хочу продолжать изменять номера и содержимое файлов для тестирования, и я предпочел бы просто делать это по команде вместо редактирования файла сценария.

Обновление 1

Я попробовал разделители команд, как предложено, и получил ошибку ниже:

# for i in {1..5} do ; echo "New File $i" > file$i ; done
-bash: syntax error near unexpected token `echo'

Обновление 2

Я неправильно указывал разделители команд в обновлении 1. Сделано с разделителями команд, так как они в ответе ниже работают как шарм.

Ответы [ 2 ]

5 голосов
/ 24 ноября 2010

Вам нужна точка с запятой или новая строка перед , do и перед , done.Вам не нужен один после do, хотя это не больно.

Одна строка

for i in {1..5}; do echo "New File $i" > file$i; done
               ^                               ^ 

Несколько строк

for i in {1..5}
do
    echo "New File $i" > file$i
done

for i in {1..5}; do
    echo "New File $i" > file$i
done
1 голос
/ 24 ноября 2010

Следующее работает для меня, все, что вам нужно было сделать для обновления 1, это вставить разделитель команд между for и do:

for i in {1..5} ; do echo "New File $i" >file$i ; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...